pax_global_header00006660000000000000000000000064125653023420014514gustar00rootroot0000000000000052 comment=fc7234145193fbf18f3d21908353ed361ebf4e62 dotclear-2.8.0+dfsg/000077500000000000000000000000001256530234200142375ustar00rootroot00000000000000dotclear-2.8.0+dfsg/CHANGELOG000066400000000000000000000566071256530234200154670ustar00rootroot00000000000000Dotclear 2.8 - 2015-08-13 =========================================================== * New module dependencies system (plugins) * Theme editor: Cope with css theme sub-folder * extension/heritage system applied to mustek templateset * installation wizard now allows SQLite engine * Legacy editor toolbar may now be displayed below textarea * Breadcrumb plugin added to the distribution, included in mustek/currywurst templatesets * Allow a fifth parameter (optional) for image to insert a legend using figure/figcaption tags (wiki) * XHTML validator removed from legacy editor * Update jQuery from 1.11.2 to 1.11.3 * Add a blog parameter to disable internal search * Add some sort orders and filters criteria for posts and comments * Update CKEditor from 4.4.8 to 4.5.2 * Add IP and antispam filter columns when displaying spams * Add actions to directly blacklist IP from comments list * Lexical sort order for tags and widgets * Use HTML5 audio tag for MP3 attachments * Bye the 🐈, welcome the 🐸 * Lot of 🐛 🔫 * Various 🌼 adjustments * Full of 🍻 drunk Dotclear 2.7.4 - 2015-02-13 =========================================================== * Berlin theme: resources usage has been optimized * currywurst templateset: head-linkrel block name fixed * Current editor syntax: now displayed near edited field (post/page/quick entry) * Some admin URLs were malformed: fixed * Post/page preview: anti-clickjacking system fixed * The cat is valid now Dotclear 2.7.3 - 2015-01-13 =========================================================== * Restore advanced edition of category description (as in 2.6) * Various bug fixes * Some cosmetic adjustments Dotclear 2.7.2 - 2014-12-25 =========================================================== * Dotclear wiki could not be used by standard user: fixed Dotclear 2.7.1 - 2014-12-25 =========================================================== * Various bug fixes * Some cosmetic adjustments Dotclear 2.7 - 2014-12-13 =========================================================== * Security : protection against clickjacking may be activated (see blog parameters) * Switch to HTML5 : backend, templatesets and themes * ARIA roles in da place (a11y) * Multiple templatesets : mustek (legacy) and currywurst * Themes may use extension/heritage template mechanisms * New theme (Berlin) based on currywurst templateset * New WYSIWYG editor (CKEditor) * Dotclear Wiki now produces HTML5 compatible markup * Video and audio HTML5 tags are now used (with fallback to flash if possible) * Copying default theme to user-defined theme folder is not more necessary * Preview of comment may be optional (see blog parameters) * Widgets may be put offline without deleting them * jQuery version may be choosen between 1.4.2 (default) and 1.11.1 (see blog parameters) * Number of posts listed on home page may be different than other pages (see blog parameters) * Hidden folders are now hidden in media manager (set DC_SHOW_HIDDEN_DIRS to true in config.php to display them) * User-defined template files may be reset (deleted) in theme editor * Drag'n'drop now enabled on touch screens * Alternative syntax may be set for comments by third-party plugins * A lot of bug fixes * Much more cosmetic adjustements and enhancements Dotclear 2.6.4 - 2014-08-18 =========================================================== * Security fix: Sanitize search request. Thanks to Takayuki Uchiyama * Security fix: Strenghened xmlrpc (see http://www.breaksec.com/?p=6362) Dotclear 2.6.3 - 2014-05-16 =========================================================== * Security fix: Strengthened xmlrpc auth. Thanks to Egidio Romano * Security fix: Strengthened categories ordering. Thanks to Egidio Romano Dotclear 2.6.2 - 2014-01-20 =========================================================== * Security fix: Fixed potential code injection on password protected post/page. Thanks to Charlie Briggs * Bugfix: cope with numeric module (plugin/theme) id * Bugfix: Bad SQL syntax when using SQLite * Bugfix: BlogParentThemeURL template value is back * Various bug fixes Dotclear 2.6.1 - 2013-11-22 =========================================================== * Bugfix: trackbacks/pingbacks post URL * Bugfix: short/full list of tags (post edition) * Bugfix: Toolbar not drawn on new comment form (administration) * Various bug fixes * Some cosmetic adjustments Dotclear 2.6 - 2013-11-13 =========================================================== * Various bug fixes * Various cosmetic adjustments Dotclear 2.6-RC - 2013-10-18 =========================================================== * PHP 5.2 required * jQuery upgraded to 1.10.2 (including jQuery migrate plugin 1.2.1) * mySQLi support (now proposed by default rather than mySQL) * Administration revamped, relooked, redesigned, new icons, new ergonomic's behaviours * Administration is now responsive (easier to cope with it on small devices) * Administration menu re-organized * a11y (accessibility) everywhere, with and whithout Js * Success, notice and warning messages have been harmonized * daInstaller has been dispatched in core (in plugins and blog themes management) * Global help is now available, contextual help is available on every page * Media manager enhanced * Maintenance plugin revamped and enhanced (now includes export features) * Categories management enhanced * Plugins and themes management revamped * New “Plumetis” variation for Blowup theme * Jasmine is now used for unit testing of js components * A lot of bug fixes * A lot of cosmetics adjustments * A lot of enhancements Dotclear 2.5.3 - 2013-09-13 =========================================================== * Bugfix: l10n Clearbricks library * Bugfix: post's comments and trackbacks counters * Check public and cache directories (existence and permissions) * Avoid Categorie's identical URL as far as possible * Cope with alpha layers in PNG images for thumbnails generation * Add password strength indicators * Fix permission form (checkboxes management) * Better management of antispam filters * Minor enhancements * Various bug fixes * Various cosmetic adjustments Dotclear 2.5.2 - 2013-08-14 =========================================================== * Security fix: Fixed potential XSS * Bugfix: l10n Clearbricks library * now works * Dotclear update check may now be forced (ignoring cache) * Enforce integration of daInstaller plugin * Tags link button is now available on page editor * Default cache age is now 1 week instead of 2 hours * Quick entry dashboard module is not activated by default on new installation * New template {{tpl:BlogParentThemeURL}} (return URL of parent theme of blog's theme if any, URL of blog's theme otherwise) * Fix post comments number on comments deletion * Fix order of backup files * Minor enhancements * Various bug fixes * Various cosmetic adjustments Dotclear 2.5.1 - 2013-07-20 =========================================================== * Security fix: Replacement of swfupload.swf by a jQuery plugin * Security enhancement: Strenghened lists display * Thumbnails quality improved * Minor enhancements * Various bug fixes * Various cosmetic adjustments Dotclear 2.5.0 - 2013-03-12 =========================================================== * Security fix: XSS vulnerabilities in swfupload.swf (media enhanced uploader) * Ductile theme may now use webfont (from Google, Adobe and similar providers) * daInstaller plugin is now included in the official distribution * The media enhanced uploader may now be temporarily enabled or disabled * Add mass expand on posts and comments lists * Allow wildcard for IP address on comments filters * Add ability to delete non empty category (and move its content to another category) * Every types of entries may be used to inserted an entry link in current edited post * Add (none) option to image insertion title pattern * Smileys are not more converted in image in pre,code,kbd,script and math contents * Notes' title can be now enclosed in h4 (default), h3 or p HTML tag * Now display translated name and desc of plugins * Add publication date validation on post and page editing forms * Add description to widgets * Add syntax color option to theme editor plugin * Add delete button on media item page * Add/complement display modes (all pages, home page only, except on home page) for all widgets * {{tpl:Widgets}} without type attribute set displays now all widgets (from nav, extra and custom) * Add {{tpl:else}}, {{tpl:TagCount}}, , {{tpl:CategoryEntriesCount}} template tags * Add cat_only, no_tag and content_only attributes to {{tpl:EntryFirstImage}} tag * Add capitalize attribute to template filters' list * Enhance links lookup anti spam filter * Add hidden optional attribute for pages * Adaptative compression rate for thumbnails generation * Add timestamp on admin information messages * Update to jQuery 1.8.3 and jQuery-UI 1.9.2 (custom) * Add default favicon.ico * Add default attributes settings for image,mp3,flv insertion * Various bug fixes * Various cosmetic updates and contrast adjustments Dotclear 2.4.4 - 2012-08-13 =========================================================== * Bugfix: Programmed entries works again. * Compatibility fix: widgets are now fully php >=5.3 compliant * Security fix: potential CSRF in user management * has_tag now part of dotclear core, moved from tag plugin. * empty title fixed on rss reader widget Dotclear 2.4.3 - 2012-05-18 =========================================================== * Admin: My favorites menu can be hidden * Admin: Fix wordpress importer * Admin: about:config and user:pref tables are now more readable * Ductile theme: Blog logo can be changed * New lithuanian language (thanks to Paulius Černakauskas) * Various bug fixes Dotclear 2.4.2 - 2012-02-11 =========================================================== * Security fix release * 4 XSS vulnerabilities fixed, discovered by High-Tech Bridge Dotclear 2.4.1.2 - 2011-12-24 =========================================================== * Happy Christmas! * Security: fixed one SQL injection vulnerability in Clearbricks, thanks to Adjaya * New behaviour: publicGetURLFor * New behaviour: publicRegisterURL * New behaviour: templatePrepareParams * Changed the way to get artefacts URLs, through $core->url->getURLFor calls, instead of $core->url->getBase() * new/updated parameter sql_only in $core->blog->getPosts and $core->blog->getComments Dotclear 2.4.0 - 2011-11-13 =========================================================== * Admin: new iconset from Thomas Daveluy * Admin: Accessibility enhancements * Added a custom widget sidebar * Added a new theme (Ductile) * Added a new plugin (simpleMenu) * handling of postgres non default schemas (db_prefix = 'schema.prefix') * New iconset mechanism * New behaviour: coreBlogBeforeGetPosts * Security fix: Spam comments feed now checks for blog permission. Thanks to Romuald Brunet. * Various bug fixes Dotclear 2.3.1 - 2011-06-14 =========================================================== * Updated makefile for cleaner distrib. * Better localization handling for prefs and shortcuts. * Misc JS & CSS cleaning. * Import/Export preferences-related bugfix. * Administrative mail address is now configurable. * Security: one minor fix and changes for two potential problems. Thanks to Jeremie Boutoille Dotclear 2.3.0 - 2011-05-16 =========================================================== * Admin: Major backend redesign * Admin: Customizable Dashboard * Admin: New Favourites admin submenu * Admin: New user preferences backend * Admin: Accessibility enhancements * Admin: Inline help extended * Templates: Default theme templates moved to inc/public/default-templates * Clearbricks: External libraries relocated to inc/libs * Clearbricks: fixed utf-8 and mysql strict mode problems * Added a safe mode connection, disabling all plugins * Mysqli support (config.php may need to be updated manually) * Fixed dcLog bug with pgsql * Fixed comment/trackbacks counters reset. * Several other bug fixes Dotclear 2.2.3 - 2011-04-01 =========================================================== * Security fix in media manager. Thx to Raphaël * Bugfix : 2.2.2 was preventing manual thumbnail regeneration. * Database handling bugfixes Dotclear 2.2.2 - 2011-01-17 =========================================================== * Bugfix: 2.2.1 was blocking new installations * Autoupdate procedure should now be "bad ftp client configuration"-proof. * Several other small bugfixes Dotclear 2.2.1 - 2011-01-15 =========================================================== * ExternalMedia is not part of the core distribution anymore * New attribute to tpl:SysIf: blog_id * New behaviour: adminMediaItemForm * Several bugfixes * Several code optimizations * Several typos corrected * Security fix in Clearbricks. Thx to François Pierre-Doray for pointing it out. Dotclear 2.2 - 2010-07-01 =========================================================== * New installation wizard. * Several new behaviours: - adminCommentHeaders - adminCommentsActionsCombo - adminCommentsActions - adminCommentsActionsContent - adminBeforeCommentDelete - adminPostsActionsHeaders - adminUsersActionsCombo - coreBeforeCategoryCreate & coreAfterCategoryCreate - coreBeforeCategoryUpdate & coreAfterCategoryUpdate - coreBeforeLogCreate & coreAfterLogCreate - coreBeforePostCreate & coreAfterPostCreate - coreBeforePostUpdate & coreAfterPostUpdate - coreMediaConstruct - templateCustomSortByAlias - urlHandlerGetArgsDocument * New methods for several core classes. * Metadata integration to the core. * Error handlers can now be extended. * Templates: blocks can now be recursive. * Templates: Entries & Comments tags can now be sorted. * Templates: The template subsystem is quicker, linier, and ready to be extended. * Complete reworking of the settings system * Correct handling of postgresql non default schemas. * Admin: Autocompletion and further enhancing to tags handling. * Admin: Accessibility & ergonomic tweaks. * Admin: Administrator tag in users list. * Comment cookies are now specific to the blog rather than to the domain. * Password changes can now be mandatory. * jQuery updated to 1.4.2. * And way too many bugfixes and typos squashes to be listed. Dotclear 2.1.7 - 2010-05-25 =========================================================== * Auto-update procedure fix Dotclear 2.1.6 - 2009-10-01 =========================================================== * Install procedure fixes * Admin: Page managers can now create pages * Admin: several typos corrected. * Admin: Widgets now work in IE8. * Admin: Password protected posts can now be previewed. * Templates: tpl:Meta* are now tpl:Tags*. * Templates: now display all posts. * new behavior: adminPageHTMLHead * DB schema: new blog_id field in log table * Media manager: Pubic folder can now be set on a different host. * WordPress import fixes * Dailymotion insertion fix * Upgrade procedure: CRLF removed in files that were bugging the upgrade. * JQuery updated to 1.3 * IE7-js update * security: Full Path Disclosure protection. Thx to Karim Ayad for pointing it out. * and way too many bugfixes to be listed. Dotclear 2.1.5 - 2009-02-05 =========================================================== * Security release * Youtube insertion update Dotclear 2.1.4 - 2008-12-21 =========================================================== * Security flaw fix * WordPress import refining * XML-RPC improvements Dotclear 2.1.3 - 2008-11-19 =========================================================== * Admin: New upgrade procedure * Admin: Fixed video insertion bug * Template: New attributes * url on EntryIf * only_category on Blogroll * no_context on Pagination * Template: New tag * BlogID * Admin: escaped blog_id on authentication page Dotclear 2.1.1 - 2008-11-07 =========================================================== * Admin: Automatic Update bug fixes * Admin: Disable Automatic Update if no digests file * Admin: Javascript fixes in authentication page * Admin: Fixed errors with categories select boxes * Template: Added level attribute in tpl:Categories * Media: Added H.264/MPEG-4 AVC for mp4 files Dotclear 2.1 - 2008-11-01 =========================================================== * Subcategories * Admin: Automatic Update * Admin: Flash 10 support for uploader * Admin: mailto link in comment details * Admin: Embedded video size selection * Admin: Restrict session cookie path to admin * Media: H.264/MPEG-4 AVC (HD) support with m4v files * Inherited themes * WordPress XML-RPC methods support * True unicode URLs * Plugin: Widgets as template tags * Plugin: Filters in entries widgets and Blogroll * Plugin: Added vimeo.com in external media * Template: New tags * LoopPosition * CommentAuthorDomain * CommentAuthorMD5 * EntryFirstImage * EntryCategoryShortURL * CategoryIf * CategoryFirstChildren * CategoryParents * EntryCategoriesBreadcrum * MediaURL Dotclear 2.0.2 - 2008-09-05 =========================================================== * New installation procedure * Plugin: WordPress import fixes * Plugin: Plain text export as downloadable files * Plugin: Message about URLs in Dotclear 1.2 import * Public: Display a message if search returns no result * Admin: Fixed some CSS bugs * Admin: Batch select/unselect entries * Admin: In a media item, find entries containing it Dotclear 2.0.1 - 2008-08-16 =========================================================== * Plugin: Fixed a bug with Dotclear 1.2 URLs import. * Plugin: Fixed a l10n bug in Pages * Admin: Enhanced plugins resources loading and cache Dotclear 2.0 - 2008-08-01 =========================================================== * Public: Atom becomes the default feed format. RSS 2 is always available. * Admin: design enhancements and new Dotclear logo * Admin: entries preview in blog context * L10N: New language manager with zip files support * Plugin: Import/Export plugin version 2.0 with import from Dotclear 1.2 and WordPress * Plugin: Pages enhancements (preview, sorting) * Plugin: support for jamendo and deezer in External Media * JSMin on JavaScript files instead of JS packing * SQLite 3 only support (PDO based) * Many bug fixes and major performances improvements Dotclear 2.0 RC2 - 2008-06-21 =========================================================== * FairTrackback spam filter * Language pack infrastructure * Bug fix on comment search with author "0" * Javascript fixes * dcAuth::sessionExists and dcAuth::checkSession new methods * Right management in dcAuth::sudo * Media File sorting options in media manager * CandyUpload, new uploader tool based on SWFUpload * New search engine robots options * New image options * L10N: Japanese and Portugues (Brazil) language packs * Many bug fixes and enhancements Dotclear 2.0 RC1 - 2008-05-01 =========================================================== * New: Pages plugin * New: Theme editor plugin * Entries: Text and WYSIWYG enhancements * Entries: Markup validator * Entries: Insertion of links to other entries from toolbar * Entries: External media insertion (dailymotion, youtube, google video) * Tags: Same list for new and existing entries * Tags: Tags can be removed on all associated entries * Tags: Tags can be removed on a post selection * Admin: Ask password for user management tasks, theme upload and plugin upload * Admin: New contextual help viewer * Media manager: Recreate thumbnails option * Media manager: Custom medium thumbnail size (per blog) * Media manager: Zip files extract support * Media manager: Zip file download of directory * Media manager: File exclusion pattern option * Themes and plugins: Zip as new package format * Themes and plugins: Upload * Themes and plugins: Upgrade within administration interface * Themes and plugins: Deletion * Public: New default theme: Blowup (fully customizable) * Public: Changed the way commenter cookie is handled * Themes: Template files moved to tpl/ directory * L10N: Polish, Catalan and Spanish translations * Misc: jQuery upgraded to 1.2.3 * Misc: Crushed png files * Fixed many bugs Dotclear 2.0 beta 7 - 2007-07-12 =========================================================== * New way to display comments and trackbacks on entries in backend * Dashboard visual improvements * Default cache dir created by installation process * Option to limit posts and comments in feeds * Introduced UDBS for installation and upgrade * Changed handling of XML-RPC URLs * New option to force HTTPS redirect if wanted * Enforced cookies security (directory and ssl support) * Added Plugin auto-install and auto-upgrade support * Added trackbacks ttl and moderation preferences * Added an Internal search engine * FLV support in backend with Neolao player * Added nice messages if database is broken or Dotclear not installed * upgrade jQuery to 1.1.3 * Fixed many bugs * Fixed security issues in backend Dotclear 2.0 beta 6 - 2007-02-19 =========================================================== * New antispam plugin, with a set of filters (rbl, ipblacklist, spamwords, akismet) * New admin dashboard page * Fixed unwanted logout bug * Added settings to disable template caching and allow PHP code * Blog preferences panel bug fix * New XML-RPC Client and Server * Comment posting permissions bug fix Dotclear 2.0 beta 5.4 - 2007-01-19 =========================================================== * Minor change on spam display in comments.php * Command line upgrade script and fix in load_plugin_file.php * Make akismet configurable only by superadmin with DC_AKISMET_SUPER * SQL optimisations * New comments view in post Dotclear 2.0 beta 5.2 - 2007-01-11 =========================================================== * Fixed a bug with imageMeta::getMeta * Enhanced dynamic file uploader * Move clearbricks files to their own repository * Fixed a bug with auto_br in wikiSimpleComment * Support for language restriction in feeds * Default theme structure changes * Fixed a PHP 5.0 compatibility issue * Installation Wizard Dotclear 2.0 beta 4 - 2006-12-26 =========================================================== * Performances enhancements. * Administration UI enhancements. * More user-friendly Widgets (version 1.5). * Switch to jQuery . * Added jQuery in default theme. * Major changes in HTTP client and Feed Parser based on a generic socket handler. * PHP 5.2 compatibility. * Code documentation (all core and most of clearbricks). * Many bug fixes. Dotclear 2.0 beta 3 - 2006-11-05 =========================================================== * Disallow special wrappers for fopen like functions. * XML/RPC improvements. * Read IPTC and EXIF metadata in uploaded pictures. * MySQL 4.1 support only. * Metadata import from Dotclear 1.2.x. * Akismet plugin. * Pings plugin. * Added a priority setting for plugins. * Many bug fixes. Dotclear 2.0 beta 2 - 2006-08-09 =========================================================== * DC_PLUGIN_ROOT can handle more than one path. * OPML/XBEL import in blogroll plugin. * Fixed a security issue in html::absoluteURLs(). * Fixed issues with timezone on scheduled entries. * Multiple categories selection in tpl:Entries. * Improved dbLayer. * Changed category feed URL. * Feeds for tags (entries and comments). * Added attachments count on backend and frontend. * New settings code design. Can now handle wide system settings. * Memory usage improvements with autoloader. * Some code cleanup. * Feed parser improvements. * Themes can be configured if needed. * XMP support on JPEG files. * Media manager improvements. * Spamplemousse now uses DNSBL (and the guy who left the bug was fired). * Javascript editor and toolbar improvements. * RDS support (XML/RPC API discovery). * Added a theme with user stylesheet. * Plugins manager dotclear-2.8.0+dfsg/CREDITS000066400000000000000000000014071256530234200152610ustar00rootroot00000000000000This is a credits file of people that have contributed to the Dotclear project. Dotclear Team ------------- Thomas Bouron Anne Cavalier Noé Cendrier Benoit Clerc Grégory Corvisier Florent Cotton Jean-Christian Denis Philippe Hénaff Bruno Hondelatte Kévin Lepeltier Olivier Meunier Franck Paul Michel Pelletier Xavier Plantefève Nicolas Roudaire Jean-Michel Royer Anne Sophie Tranchet Alain Vagner Dotclear Translators -------------------- Benjamin Bank Alain Béarez Claire Cambier Luis Correia Andreas Diller Alain Fagot Sabrina Favier Charles Hebert Guillaume Jonquiere Dennis S. L. Jørgensen Miguel A. Muñoz Sebestyén Muráncsik Nnidŷu Polo Aina Chabert Ramon Adnan Shameem Enrique Matias Sanchez Jan Skrasek Takafumi Regina Timbó ... and all contributors. dotclear-2.8.0+dfsg/LICENSE000066400000000000000000000431031256530234200152450ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble 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 Lesser General Public License instead.) You can apply it to your programs, too. 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. 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. 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. 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. 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. 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. 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". 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. 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: 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. 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. 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. 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, 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.) 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. NO WARRANTY 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. 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. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs 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. 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. 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General Public License instead of this License. dotclear-2.8.0+dfsg/README.md000066400000000000000000000061501256530234200155200ustar00rootroot00000000000000# README ## WHAT IS DOTCLEAR ? Dotclear is an open-source web publishing software. Take control over your blog! Dotclear project's purpose is to provide a user-friendly tool allowing anyone to publish on the web, regardless of their technical skills. ### Features: * Easy publication * Fully customizable theme * User-friendly administration * Flexible template system * Media management * Choose from several editing syntax (wiki, markdown, textile or directly in wysiwyg) * Flexible comment system * Built-in antispam * Localization * Presentation widgets * Themes and plugins * Pages * Tags and categories * Automated installation * Support for several database types * Multiblog * Multi-user with permissions * Standards compliant * Accessible * Importing / exporting * Naturally optimized for search engines * Syndication feeds * Complete trackback support * Full Unicode support * XML/RPC client support * Extensible * Performance and scalability * Twice free ## REQUIREMENTS In order to run Dotclear you need: * A web server (Apache, Cherokee, Nginx, lighttpd, etc.) * PHP 5.3 with the following modules: * mbstring * iconv * simplexml * mysql, mysqli, postgresql or sqlite * A database server (MySQL or PostgreSQL) or SQLite. ## INSTALLATION ### Automatic installation The easiest way to install the blog engine is automatic installation. Download the [one minute install file][1], upload it to your web space. Then open it in your favorite browser. You'll only have to follow the instructions on screen. See the [documentation][2] for more information. ### Standard installation. You need to download [Dotclear archive][3], extract it then upload your files to your web space using an FTP client. Then open your favorite browser and go to http://your.host.name/dotclear/admin/install/. A message alerts you that you haven't got a configuration file and offers to run the wizard. Click this link. ## DOCUMENTATION Still unsure if you want to move? A "[guided tour][4]" is what you need. Dotclear is fully documented: * If you have moved in already, the [User Manual][5] is there for you. * The managers will turn to the [Administration Guide][6]. * Decorators and craftsmen will surely enjoy reading the [Developer and designer resources][7]. Dotclear documentation uses a wiki. Feel free to contribute. CONTRIBUTING ------------ Dotclear is an open source project. If you'd like to contribute, please read the [CONTRIBUTING file](CONTRIBUTING.md). You can submit a pull request, or feel free to use any other way you'd prefer. Repositories: ------------- https://hg.dotclear.org/dotclear/ (official) https://bitbucket.org/dotclear/dotclear (Bitbucket) https://github.com/dotclear/dotclear (Github, sync'ed with Bitbucket) [1]: http://download.dotclear.org/loader/dotclear-loader.php [2]: http://dotclear.org/documentation/2.0/admin/install [3]: http://dotclear.org/download [4]: http://dotclear.org/documentation/2.0/overview/tour [5]: http://dotclear.org/documentation/2.0/usage [6]: http://dotclear.org/documentation/2.0/admin [7]: http://dotclear.org/documentation/2.0/resources dotclear-2.8.0+dfsg/admin/000077500000000000000000000000001256530234200153275ustar00rootroot00000000000000dotclear-2.8.0+dfsg/admin/_charte.php000066400000000000000000001012651256530234200174520ustar00rootroot00000000000000 Bibliothèque de styles - Dotclear - 2.7

Typographie

Textes

La font-size de base est à 1.2rem (la valeur 1rem correspond à 10px). Si vous utilisez l'unité rem pensez à faire précéder la déclaration par son équivalent en pixels pour rester compatible avec Internet Explorer. L'interlignage courant est à 1.5.

La liste suivante est de class "nice". Elle est semblable aux listes ordinaires mais avec des puces carrées.

  • Les textes courants sont en Arial, Helvetica ou sans-serif.
  • Le code adopte la fonte Andale Mono, Courier New ou monospace.
  • Les liens ont des aspects différents au focus et au survol. Il faut conserver cette distinction, nécessaire à l'accessibilité et l'ergonomie.

Titre h3

Le titre de niveau h1 est réservé au titre du site-admin. Le titre de niveau h2 est réservé au breadcrumb/titre de la page courante. On utilise les titres de niveau h3 en premier niveau de titre à l'intérieur des pages, comme sur la page Import/Export.

Il ne faut pas choisir un niveau de titre en fonction de son aspect mais respecter une hiérarchie cohérente. On peut obtenir visuellement l'aspect d'un titre h3 en donnant à l'élément la class "as_h3".

Titre de niveau h4

On peut obtenir visuellement l'aspect d'un titre h4 en donnant à l'élément la class "as_h4".

Titre de niveau h5

Le titre de niveau h5 est assez peu employé mais son style est prévu. Dans une admin de base, on utilise les niveaux h5 pour certains éléments du sidebar du billet, mais un style particulier leur est alors appliqué pour ressembler aux autres items de ce sidebar.

Titres des encadrés

Les titres de boîte encadrées (div de class "fieldset", comme ici) se présentent comme ci-dessus.

On peut utiliser, quel que soit le niveau hx de cet intertitre la class "pretty-title" pour obtenir l'effet ci-dessus.

Autre variante

On dispose également d'une class "smart-title" pour obtenir une présentation comme celle du titre de ce paragraphe.

Layouts

Onglets

Les descriptions des constructions en multi-colonnes ci-dessous présentent un exemple de répartition en onglets.

Chacun de ces onglets doit être défini à l'aide d'une <div class="multi-part">. Ils seront alors automatiquement présentés sous forme d'onglets.

Multi-colonnage

Boîtes distribuées horizontalement

1 Toutes les boîtes de class "box" placées à l'intérieur d'une boîte de class "one-box" se distribuent horizontalement (imaginez que chaque boîte est un mot dans un paragraphe). Si les largeurs de ces boîtes ne sont pas spécifiquement définies dans la CSS, elle s'ajustent à leur contenu.

2 Voici une petite boîte.

3 Une autre petite boîte.

4 Par défaut les « lignes » de boîtes "box" sont justifiées au sein de la boîte "one-box" et l'espacement se répartit entre elles.

5 Si vous souhaitez un autre alignement des boîtes entre elles vous pouvez ajouter les class :

  • "txt-left",
  • "txt-right"
  • ou "txt-center"

à la class "one-box".

6 Le cadre placé ici autour de chaque boîte ne fait pas partie des styles par défaut.

Boîtes distribuées deux par deux

1 Les boîtes de class "two-boxes" ont une règle CSS display:inline-block;. Elles se rangent alternativement à gauche et à droite. Pour plus de clarté, les blocs sont ici numérotés avec leur ordre dans le flux.

2 On peut assortir une boîte des class "odd" (nothing left) et "even" pour que les marges se placent correctement.

3 Attention, il faut soit ne pas retourner à la ligne entre la fermeture d'une boîte "two-boxes" et l'ouverture de la suivante soit adopter la méthode de commentaire vide mise en place ici et expliquée chez Alsacréations (« Méthode 2 »).

4 On peut bien sûr imbriquer des boîtes de class "two-boxes" au sein d'une boîte "two-boxes" afin qu'elles…

4 bis… se distribuent horizontalement comme dans une boîte "one-box".

Boîtes distribuées trois par trois

Sur le même principe que les « two-boxes » on peut utiliser des boîtes de class "three-boxes" pour répartir les contenus sur trois colonnes de 30% chacune (le reste est occupé par les marges).

Comme pour les "two-boxes" il faut soit ne pas laisser d'espace ou de retour à la ligne entre les boîtes, soit adopter la méthode recommandée plus haut.

Dans les « two-boxes » comme dans les « three-boxes », on peut placer à l'intérieur plusieurs autres div de class="box" qui s'afficheront les unes à côté des autres ou l'une en dessous de l'autre selon la place dont elles disposent.

Deux colonnes flottantes de largeurs égales

La div englobante porte la class "two-cols", chacune de ses div porte la class "col". Sans autre précision les deux colonnes sont d'égale largeur.

Attention : ces colonnes sont construites avec des flottants, il faut donc penser à mettre une class clear à l'élément suivant ou ajouter la class "clearfix" à la div class="two-cols".

Deux colonnes flottantes de largeurs inégales

col70 La div englobante porte la class "two-cols". Pour obtenir des colonnes inégales, on dispose des classes "col70" et col30 à attribuer à l'une ou à l'autre de ses colonnes.

col30 Penser à mettre une class "clear" à l'élément suivant ou ajouter la class "clearfix" div class="two-cols".

Trois colonnes flottantes de largeurs égales

Deprecated. Ces règles sont conservées dans la 2.6 par souci de rétro-compatibilité mais il est recommandé d'utiliser désormais le colonnage three-boxes.

Colonne 1

La div englobante porte la class "three-cols", chacune de ses div porte la class "col". Les trois colonnes sont d'égale largeur.

Colonne 2

Voici une deuxième colonne. N'oubliez pas d'ajouter la class "clearfix" à la class "three-cols" ou un élément de class "clear" après cet élément.

Colonne 3

Voilà la troisième colonne.


Note : dans les exemples les valeurs et les numérotations sont placées dans un span class="step" (et ressortent donc dans un petit bloc à fond gris).

Interactions

Éléments de formulaire

p class="form-note".

span class="form-note"

La class="bold" est bien sûr à écrire en minuscules.

Les checkboxes et les boutons radio sont dans la balise <label>.

Légende de fieldset

Attention: Les fieldsets ne doivent être utilisés que pour isoler un groupe de champs au sein d'un formulaire.

Boutons

a.button.add Se place en haut à droite (dans un p.top-add)

a.button a.reset

a.button delete

Messages

Messages système

Il existe quatre types de messages système auxquels correspondent des classes CSS : .error, .message, .success, .warning-msg. Ils s'affichent en haut de page, sous le titre/breadcrumb.

Message simple. Le plus souvent horodaté dcPage::message

Message de succès. Le plus souvent horodaté dcPage::success

Message warning. Non horodaté dcPage::warning

Message d'erreur. Non horodaté dcPage::error

La classe .static-msg peut être utilisée directement pour affichage en haut de page :

Comme le message simple mais sans effets de transition.

Un type de message réservé à Dotclear peut s'afficher en haut de la page :

Messages contextuels

Paragraphe de message d'alerte class warn ou warning.

Paragraphe de message de class info.

Ces messages sont en display:inline-block. Le fond s'adapte à la longueur du message.

Navigation

Selecteur d'accès direct

Sur des pages longues et denses comme les pages about:config ou about:preferences, on peut utiliser un sélecteur pour faciliter l'accès direct aux sections.

Navigation contextuelle

Lien vers le blog

Pseudo-onglets

Les pseudo-onglets permettent d'ajouter des sous-pages qui sont des liens vers d'autres pages, par opposition aux onglets qui sont des sections internes à la page.

Les pseudo-onglets sont à positionner immédiatement après le breadcrumb (ici un hr simule le trait sous le breadcrumb).

Ces pseudo-onglets doivent être définis avec un <ul class="pseudo-tabs"> et des <li>.


Tableaux

Il existe deux mises en forme type de tableaux selon que l'on cherche à faire un tableau ordinaire ou un tableau dont on peut déplacer les lignes par glisser déposer (voir plus bas). Cependant certaines règles sont communes à tout les tableaux.

Règles communes

Largeur du tableau

Sauf pour des tableaux particuliers (absents dans l'admin mais qui pourraient être nécessaires à un plugin,les tableaux occupent toute la largeur de la page. Afin que les tableaux soient consultables sur un mobile en navigant horizontalement, on englobe le tableau dans une div class="table-outer", qui servira de « conteneur ».

Accessibilité

Les éléments caption, th, scope sont nécessaires à l'accessibilité. Ne les oubliez pas ! ». On peut utiliser la class="hidden" sur l'élément caption (qui accueille le titre du tableau) si vous ne souhaitez pas qu'il soit affiché sur la page.

Les classes

Des classes particulières peuvent être attribuées aux lignes :

  • line (systématique) : pour les traits horizontaux et le fond gris léger au survol ;
  • offline : pour un noir estompé (gris quoi).

Des classes particulières peuvent être appliquées aux cellules :

  • nowrap : pas de retour à la ligne dans la cellule, quelle que soit la largeur de la page ;
  • maximal : la cellule prendra toute la largeur restante disponible ;
  • count : le contenu de la cellule sera aligné à droite avec un petit retrait.

Tableau classique

Titre Date Catégorie Auteur Commentaires Rétroliens État
Mon cher Franck 06/08/2013 19:16 Les aventures du clafoutis kozlika4 0Publié Sélectionné
Dotclear 2.3.0 16/05/2011 22:29 Les aventures du clafoutis kozlika5 0Non publié Sélectionné
Causons opéra au Tamm Bara 24/11/2009 23:10 Les aventures du clafoutis kozlika 41 Publié
Souffler six bougies 14/08/2009 00:00Les aventures du clafoutis kozlika 42Publié
Dotclear et grenadine, troisième édition 15/06/2009 07:39 Les aventures du clafoutis kozlika 9 1 Publié
L'abc dotclear est né 19/03/2009 10:31Les aventures du clafoutis kozlika 10 Publié

Tableau avec ordonnancement

Les tableaux permettant l'ordonnancement doivent offrir la possibilité d'effectuer le classement grâce à des inputs placés en début de ligne pour que le classement soit possible même lorsque cette fonctionnalité est désactivée (via les préférences utilisateurs, voire une désactivation complète du javascript dans le navigateur).

Titre Date Auteur Commentaires Rétroliens État
Mentions légales 17/12/2008 07:35 franck 0 0 Publié
Page active et cachée 26/10/2012 11:08 admin 0 0 Publié Masqué
Page révisionnable 14/12/2012 13:26 admin 0 0 En attente
Programme 26/10/2020 11:23 admin 0 0 Programmé
Protégée 26/10/2012 11:23 admin 0 0 En attente Protégé

Icônes

Les icônes utilisées dans l'administration sont présentes en deux formats  64*64px pour les grandes (qui sont affichées sur le tableau de bord si la page correspondante est choisie en favori par l'utilisateur) et 16*16px pour les petits formats.

La plupart sont dérivées de la fonte d'icônes Elegant Font. Les autres sont des images vectorielles réalisées par la DC Team. Nous les avons nommées Traviata. La palette de couleurs utilisée est la suivante :

palette des couleurs utilisées pour les icônes

Bleu : #137bbb - Vert : #9ac123 - Rouge : #c44d58 - Bleu ciel : #a2cbe9 - Gris clair : #ececec - Gris moyen : #b2b2b2 - Gris foncé : #676e78.

dotclear-2.8.0+dfsg/admin/auth.php000066400000000000000000000317411256530234200170070ustar00rootroot00000000000000adminurl->redirect('admin.home'); } # Loading locales for detected language # That's a tricky hack but it works ;) $dlang = http::getAcceptLanguage(); $dlang = ($dlang == '' ? 'en' : $dlang); if ($dlang != 'en' && preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$dlang)) { l10n::lang($dlang); l10n::set(dirname(__FILE__).'/../locales/'.$dlang.'/main'); } $page_url = http::getHost().$_SERVER['REQUEST_URI']; $change_pwd = $core->auth->allowPassChange() && isset($_POST['new_pwd']) && isset($_POST['new_pwd_c']) && isset($_POST['login_data']); $login_data = !empty($_POST['login_data']) ? html::escapeHTML($_POST['login_data']) : null; $recover = $core->auth->allowPassChange() && !empty($_REQUEST['recover']); $safe_mode = !empty($_REQUEST['safe_mode']); $akey = $core->auth->allowPassChange() && !empty($_GET['akey']) ? $_GET['akey'] : null; $user_id = $user_pwd = $user_key = $user_email = null; $err = $msg = null; # Auto upgrade if (empty($_GET) && empty($_POST)) { require dirname(__FILE__).'/../inc/dbschema/upgrade.php'; try { if (($changes = dotclearUpgrade($core)) !== false) { $msg = __('Dotclear has been upgraded.').''; } } catch (Exception $e) { $err = $e->getMessage(); } } # If we have POST login informations, go throug auth process if (!empty($_POST['user_id']) && !empty($_POST['user_pwd'])) { $user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : null; $user_pwd = !empty($_POST['user_pwd']) ? $_POST['user_pwd'] : null; } # If we have COOKIE login informations, go throug auth process elseif (isset($_COOKIE['dc_admin']) && strlen($_COOKIE['dc_admin']) == 104) { # If we have a remember cookie, go through auth process with user_key $user_id = substr($_COOKIE['dc_admin'],40); $user_id = @unpack('a32',@pack('H*',$user_id)); if (is_array($user_id)) { $user_id = $user_id[1]; $user_key = substr($_COOKIE['dc_admin'],0,40); $user_pwd = null; } else { $user_id = null; } } # Recover password if ($recover && !empty($_POST['user_id']) && !empty($_POST['user_email'])) { $user_id = !empty($_POST['user_id']) ? $_POST['user_id'] : null; $user_email = !empty($_POST['user_email']) ? $_POST['user_email'] : ''; try { $recover_key = $core->auth->setRecoverKey($user_id,$user_email); $subject = mail::B64Header('DotClear '.__('Password reset')); $message = __('Someone has requested to reset the password for the following site and username.')."\n\n". $page_url."\n".__('Username:').' '.$user_id."\n\n". __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.')."\n". $page_url.'?akey='.$recover_key; $headers[] = 'From: '.(defined('DC_ADMIN_MAILFROM') && DC_ADMIN_MAILFROM ? DC_ADMIN_MAILFROM : 'dotclear@local'); $headers[] = 'Content-Type: text/plain; charset=UTF-8;'; mail::sendMail($user_email,$subject,$message,$headers); $msg = sprintf(__('The e-mail was sent successfully to %s.'),$user_email); } catch (Exception $e) { $err = $e->getMessage(); } } # Send new password elseif ($akey) { try { $recover_res = $core->auth->recoverUserPassword($akey); $subject = mb_encode_mimeheader('DotClear '.__('Your new password'),'UTF-8','B'); $message = __('Username:').' '.$recover_res['user_id']."\n". __('Password:').' '.$recover_res['new_pass']."\n\n". preg_replace('/\?(.*)$/','',$page_url); $headers[] = 'From: dotclear@'.$_SERVER['HTTP_HOST']; $headers[] = 'Content-Type: text/plain; charset=UTF-8;'; mail::sendMail($recover_res['user_email'],$subject,$message,$headers); $msg = __('Your new password is in your mailbox.'); } catch (Exception $e) { $err = $e->getMessage(); } } # Change password and retry to log elseif ($change_pwd) { try { $tmp_data = explode('/',$_POST['login_data']); if (count($tmp_data) != 3) { throw new Exception(); } $data = array( 'user_id'=>base64_decode($tmp_data[0]), 'cookie_admin'=>$tmp_data[1], 'user_remember'=>$tmp_data[2]=='1' ); if ($data['user_id'] === false) { throw new Exception(); } # Check login informations $check_user = false; if (isset($data['cookie_admin']) && strlen($data['cookie_admin']) == 104) { $user_id = substr($data['cookie_admin'],40); $user_id = @unpack('a32',@pack('H*',$user_id)); if (is_array($user_id)) { $user_id = $user_id[1]; $user_key = substr($data['cookie_admin'],0,40); $check_user = $core->auth->checkUser($user_id,null,$user_key) === true; } } if (!$core->auth->allowPassChange() || !$check_user) { $change_pwd = false; throw new Exception(); } if ($_POST['new_pwd'] != $_POST['new_pwd_c']) { throw new Exception(__("Passwords don't match")); } if ($core->auth->checkUser($user_id,$_POST['new_pwd']) === true) { throw new Exception(__("You didn't change your password.")); } $cur = $core->con->openCursor($core->prefix.'user'); $cur->user_change_pwd = 0; $cur->user_pwd = $_POST['new_pwd']; $core->updUser($core->auth->userID(),$cur); $core->session->start(); $_SESSION['sess_user_id'] = $user_id; $_SESSION['sess_browser_uid'] = http::browserUID(DC_MASTER_KEY); if ($data['user_remember']) { setcookie('dc_admin',$data['cookie_admin'],strtotime('+15 days'),'','',DC_ADMIN_SSL); } $core->adminurl->redirect('admin.home'); } catch (Exception $e) { $err = $e->getMessage(); } } # Try to log elseif ($user_id !== null && ($user_pwd !== null || $user_key !== null)) { # We check the user $check_user = $core->auth->checkUser($user_id,$user_pwd,$user_key,false) === true; if ($check_user) { $check_perms = $core->auth->findUserBlog() !== false; } else { $check_perms = false; } $cookie_admin = http::browserUID(DC_MASTER_KEY.$user_id. $core->auth->crypt($user_pwd)).bin2hex(pack('a32',$user_id)); if ($check_perms && $core->auth->mustChangePassword()) { $login_data = join('/',array( base64_encode($user_id), $cookie_admin, empty($_POST['user_remember'])?'0':'1' )); if (!$core->auth->allowPassChange()) { $err = __('You have to change your password before you can login.'); } else { $err = __('In order to login, you have to change your password now.'); $change_pwd = true; } } elseif ($check_perms && !empty($_POST['safe_mode']) && !$core->auth->isSuperAdmin()) { $err = __('Safe Mode can only be used for super administrators.'); } elseif ($check_perms) { $core->session->start(); $_SESSION['sess_user_id'] = $user_id; $_SESSION['sess_browser_uid'] = http::browserUID(DC_MASTER_KEY); if (!empty($_POST['blog'])) { $_SESSION['sess_blog_id'] = $_POST['blog']; } if (!empty($_POST['safe_mode']) && $core->auth->isSuperAdmin()) { $_SESSION['sess_safe_mode'] = true; } if (!empty($_POST['user_remember'])) { setcookie('dc_admin',$cookie_admin,strtotime('+15 days'),'','',DC_ADMIN_SSL); } $core->adminurl->redirect('admin.home'); } else { if (isset($_COOKIE['dc_admin'])) { unset($_COOKIE['dc_admin']); setcookie('dc_admin',false,-600,'','',DC_ADMIN_SSL); } if ($check_user) { $err = __('Insufficient permissions'); } else { $err = __('Wrong username or password'); } } } if (isset($_GET['user'])) { $user_id = $_GET['user']; } header('Content-Type: text/html; charset=UTF-8'); // Prevents Clickjacking as far as possible header('X-Frame-Options: SAMEORIGIN'); // FF 3.6.9+ Chrome 4.1+ IE 8+ Safari 4+ Opera 10.5+ ?> <?php echo html::escapeHTML(DC_VENDOR_NAME); ?> callBehavior('loginPageHTMLHead'); ?>

'.$err.''; } if ($msg) { echo ''; } if ($akey) { echo '

'.__('Back to login screen').'

'; } elseif ($recover) { echo '

'.__('Request a new password').'

'. '

'. form::field(array('user_id','user_id'),20,32,html::escapeHTML($user_id)).'

'. '

'. form::field(array('user_email','user_email'),20,255,html::escapeHTML($user_email)).'

'. '

'. form::hidden(array('recover'),1).'

'. '
'. ''; } elseif ($change_pwd) { echo '

'.__('Change your password').'

'. '

'. form::password(array('new_pwd','new_pwd'),20,255).'

'. '

'. form::password(array('new_pwd_c','new_pwd_c'),20,255).'

'. '
'. '

'. form::hidden('login_data',$login_data).'

'; } else { if (is_callable(array($core->auth,'authForm'))) { echo $core->auth->authForm($user_id); } else { if ($safe_mode) { echo '
'; echo '

'.__('Safe mode login').'

'; echo '

'. __('This mode allows you to login without activating any of your plugins. This may be useful to solve compatibility problems').' 

'. '

'.__('Disable or delete any plugin suspected to cause trouble, then log out and log back in normally.'). '

'; } else { echo '
'; } echo '

'. form::field(array('user_id','user_id'),20,32,html::escapeHTML($user_id)).'

'. '

'. form::password(array('user_pwd','user_pwd'),20,255).'

'. '

'. form::checkbox(array('user_remember','user_remember'),1). '

'. '

'; if (!empty($_REQUEST['blog'])) { echo form::hidden('blog',html::escapeHTML($_REQUEST['blog'])); } if($safe_mode) { echo form::hidden('safe_mode',1). '
'; } else { echo '
'; } echo ''; echo '
'; if ($safe_mode) { echo '

'.__('Get back to normal authentication').'

'; } else { echo '

'.__('Connection issue?').'

'; if ($core->auth->allowPassChange()) { echo '

'.__('I forgot my password').'

'; } echo '

'.__('I want to log in in safe mode').'

'; } echo '
'; } } ?>
dotclear-2.8.0+dfsg/admin/blog.php000066400000000000000000000063321256530234200167670ustar00rootroot00000000000000con->openCursor($core->prefix.'blog'); $blog_id = $cur->blog_id = $_POST['blog_id']; $blog_url = $cur->blog_url = $_POST['blog_url']; $blog_name = $cur->blog_name = $_POST['blog_name']; $blog_desc = $cur->blog_desc = $_POST['blog_desc']; try { # --BEHAVIOR-- adminBeforeBlogCreate $core->callBehavior('adminBeforeBlogCreate',$cur,$blog_id); $core->addBlog($cur); # Default settings and override some $core->blogDefaults($cur->blog_id); $blog_settings = new dcSettings($core,$cur->blog_id); $blog_settings->addNamespace('system'); $blog_settings->system->put('lang',$core->auth->getInfo('user_lang')); $blog_settings->system->put('blog_timezone',$core->auth->getInfo('user_tz')); if (substr($blog_url,-1) == '?') { $blog_settings->system->put('url_scan','query_string'); } else { $blog_settings->system->put('url_scan','path_info'); } # --BEHAVIOR-- adminAfterBlogCreate $core->callBehavior('adminAfterBlogCreate',$cur,$blog_id,$blog_settings); dcPage::addSuccessNotice(sprintf(__('Blog "%s" successfully created'), html::escapeHTML($cur->blog_name))); $core->adminurl->redirect("admin.blog", array('id' => $cur->blog_id)); } catch (Exception $e) { $core->error->add($e->getMessage()); } } if (!empty($_REQUEST['id'])) { $edit_blog_mode = true; include dirname(__FILE__).'/blog_pref.php'; } else { dcPage::open(__('New blog'),dcPage::jsConfirmClose('blog-form'), dcPage::breadcrumb( array( __('System') => '', __('Blogs') => $core->adminurl->get("admin.blogs"), __('New blog') => '' )) ); echo '
'. '
'.$core->formNonce().'
'. '

'. form::field('blog_id',30,32,html::escapeHTML($blog_id)).'

'. '

'.__('At least 2 characters using letters, numbers or symbols.').'

'; echo '

'. form::field('blog_name',30,255,html::escapeHTML($blog_name)).'

'. '

'. form::field('blog_url',30,255,html::escapeHTML($blog_url)).'

'. '

'. form::textarea('blog_desc',60,5,html::escapeHTML($blog_desc)).'

'. '

'. '
'; dcPage::helpBlock('core_blog_new'); dcPage::close(); } dotclear-2.8.0+dfsg/admin/blog_del.php000066400000000000000000000042111256530234200176050ustar00rootroot00000000000000getBlog($_POST['blog_id']); } catch (Exception $e) { $core->error->add($e->getMessage()); } if ($rs->isEmpty()) { $core->error->add(__('No such blog ID')); } else { $blog_id = $rs->blog_id; $blog_name = $rs->blog_name; } } # Delete the blog if (!$core->error->flag() && $blog_id && !empty($_POST['del'])) { if (!$core->auth->checkPassword($core->auth->crypt($_POST['pwd']))) { $core->error->add(__('Password verification failed')); } else { try { $core->delBlog($blog_id); dcPage::addSuccessNotice(sprintf(__('Blog "%s" successfully deleted'), html::escapeHTML($blog_name))); $core->adminurl->redirect("admin.blogs"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } } dcPage::open(__('Delete a blog'),'', dcPage::breadcrumb( array( __('System') => '', __('Blogs') => $core->adminurl->get("admin.blogs"), __('Delete a blog') => '' )) ); if (!$core->error->flag()) { echo '

'.__('Warning').'

'. '

'.sprintf(__('You are about to delete the blog %s. Every entry, comment and category will be deleted.'), ''.$blog_id.' ('.$blog_name.')').'

'. '

'.__('Please give your password to confirm the blog deletion.').'

'; echo '
'. '
'.$core->formNonce().'
'. '

'. form::password('pwd',20,255).'

'. '

'. form::hidden('blog_id',$blog_id).'

'. '
'; } dcPage::close(); dotclear-2.8.0+dfsg/admin/blog_pref.php000066400000000000000000000716201256530234200200050ustar00rootroot00000000000000blog->id; $blog_status = $core->blog->status; $blog_name = $core->blog->name; $blog_desc = $core->blog->desc; $blog_settings = $core->blog->settings; $blog_url = $core->blog->url; $action = $core->adminurl->get("admin.blog.pref"); $redir = $core->adminurl->get("admin.blog.pref"); } else { dcPage::checkSuper(); try { if (empty($_REQUEST['id'])) { throw new Exception(__('No given blog id.')); } $rs = $core->getBlog($_REQUEST['id']); if (!$rs) { throw new Exception(__('No such blog.')); } $blog_id = $rs->blog_id; $blog_status = $rs->blog_status; $blog_name = $rs->blog_name; $blog_desc = $rs->blog_desc; $blog_settings = new dcSettings($core,$blog_id); $blog_url = $rs->blog_url ; } catch (Exception $e) { $core->error->add($e->getMessage()); } $action = $core->adminurl->get("admin.blog"); $redir = $core->adminurl->get("admin.blog",array('id' => "%s"),'&',true); } # Language codes $lang_combo = dcAdminCombos::getAdminLangsCombo(); # Status combo $status_combo = dcAdminCombos::getBlogStatusescombo(); # Date format combo $now = time(); $date_formats = unserialize($blog_settings->system->date_formats); $time_formats = unserialize($blog_settings->system->time_formats); $date_formats_combo = array('' => ''); foreach ($date_formats as $format) { $date_formats_combo[dt::str($format, $now)] = $format; } $time_formats_combo = array('' => ''); foreach ($time_formats as $format) { $time_formats_combo[dt::str($format, $now)] = $format; } # URL scan modes $url_scan_combo = array( 'PATH_INFO' => 'path_info', 'QUERY_STRING' => 'query_string' ); # Post URL combo $post_url_combo = array( __('year/month/day/title') => '{y}/{m}/{d}/{t}', __('year/month/title') => '{y}/{m}/{t}', __('year/title') => '{y}/{t}', __('title') => '{t}', __('post id/title') => '{id}/{t}', __('post id') => '{id}' ); if (!in_array($blog_settings->system->post_url_format,$post_url_combo)) { $post_url_combo[html::escapeHTML($blog_settings->system->post_url_format)] = html::escapeHTML($blog_settings->system->post_url_format); } # Note title tag combo $note_title_tag_combo = array( __('H4') => 0, __('H3') => 1, __('P') => 2 ); # Image title combo $img_title_combo = array( __('(none)') => '', __('Title') => 'Title ;; separator(, )', __('Title, Date') => 'Title ;; Date(%b %Y) ;; separator(, )', __('Title, Country, Date') => 'Title ;; Country ;; Date(%b %Y) ;; separator(, )', __('Title, City, Country, Date') => 'Title ;; City ;; Country ;; Date(%b %Y) ;; separator(, )', ); if (!in_array($blog_settings->system->media_img_title_pattern,$img_title_combo)) { $img_title_combo[html::escapeHTML($blog_settings->system->media_img_title_pattern)] = html::escapeHTML($blog_settings->system->media_img_title_pattern); } # Image default size combo $img_default_size_combo = array(); try { $media = new dcMedia($core); $img_default_size_combo[__('original')] = 'o'; foreach ($media->thumb_sizes as $code => $size) { $img_default_size_combo[__($size[2])] = $code; } } catch (Exception $e) { $core->error->add($e->getMessage()); } # Image default alignment combo $img_default_alignment_combo = array( __('None') => 'none', __('Left') => 'left', __('Right') => 'right', __('Center') => 'center' ); # Robots policy options $robots_policy_options = array( 'INDEX,FOLLOW' => __("I would like search engines and archivers to index and archive my blog's content."), 'INDEX,FOLLOW,NOARCHIVE' => __("I would like search engines and archivers to index but not archive my blog's content."), 'NOINDEX,NOFOLLOW,NOARCHIVE' => __("I would like to prevent search engines and archivers from indexing or archiving my blog's content."), ); # jQuery available versions $jquery_root = dirname(__FILE__).'/../inc/js/jquery'; $jquery_versions_combo = array(__('Default').' ('.DC_DEFAULT_JQUERY.')' => DC_DEFAULT_JQUERY); if (is_dir($jquery_root) && is_readable($jquery_root)) { if (($d = @dir($jquery_root)) !== false) { while (($entry = $d->read()) !== false) { if ($entry != '.' && $entry != '..' && substr($entry, 0, 1) != '.' && is_dir($jquery_root.'/'.$entry)) { if ($entry != DC_DEFAULT_JQUERY) { $jquery_versions_combo[$entry] = $entry; } } } } } # Update a blog if ($blog_id && !empty($_POST) && $core->auth->check('admin',$blog_id)) { $cur = $core->con->openCursor($core->prefix.'blog'); $cur->blog_id = $_POST['blog_id']; $cur->blog_url = preg_replace('/\?+$/','?', $_POST['blog_url']); $cur->blog_name = $_POST['blog_name']; $cur->blog_desc = $_POST['blog_desc']; if ($core->auth->isSuperAdmin() && in_array($_POST['blog_status'], $status_combo)) { $cur->blog_status = (int) $_POST['blog_status']; } $media_img_t_size = abs((integer) $_POST['media_img_t_size']); if ($media_img_t_size < 0) { $media_img_t_size = 100; } $media_img_s_size = abs((integer) $_POST['media_img_s_size']); if ($media_img_s_size < 0) { $media_img_s_size = 240; } $media_img_m_size = abs((integer) $_POST['media_img_m_size']); if ($media_img_m_size < 0) { $media_img_m_size = 448; } $nb_post_for_home = abs((integer) $_POST['nb_post_for_home']); if ($nb_post_for_home <= 1) { $nb_post_for_home = 1; } $nb_post_per_page = abs((integer) $_POST['nb_post_per_page']); if ($nb_post_per_page <= 1) { $nb_post_per_page = 1; } $nb_post_per_feed = abs((integer) $_POST['nb_post_per_feed']); if ($nb_post_per_feed <= 1) { $nb_post_per_feed = 1; } $nb_comment_per_feed = abs((integer) $_POST['nb_comment_per_feed']); if ($nb_comment_per_feed <= 1) { $nb_comment_per_feed = 1; } try { if ($cur->blog_id != null && $cur->blog_id != $blog_id) { $rs = $core->getBlog($cur->blog_id); if ($rs) { throw new Exception(__('This blog ID is already used.')); } } # --BEHAVIOR-- adminBeforeBlogUpdate $core->callBehavior('adminBeforeBlogUpdate',$cur,$blog_id); if (!preg_match('/^[a-z]{2}(-[a-z]{2})?$/',$_POST['lang'])) { throw new Exception(__('Invalid language code')); } $core->updBlog($blog_id,$cur); # --BEHAVIOR-- adminAfterBlogUpdate $core->callBehavior('adminAfterBlogUpdate',$cur,$blog_id); if ($cur->blog_id != null && $cur->blog_id != $blog_id) { if ($blog_id == $core->blog->id) { $core->setBlog($cur->blog_id); $_SESSION['sess_blog_id'] = $cur->blog_id; $blog_settings = $core->blog->settings; } else { $blog_settings = new dcSettings($core,$cur->blog_id); } $blog_id = $cur->blog_id; } $blog_settings->addNameSpace('system'); $blog_settings->system->put('editor',$_POST['editor']); $blog_settings->system->put('copyright_notice',$_POST['copyright_notice']); $blog_settings->system->put('post_url_format',$_POST['post_url_format']); $blog_settings->system->put('lang',$_POST['lang']); $blog_settings->system->put('blog_timezone',$_POST['blog_timezone']); $blog_settings->system->put('date_format',$_POST['date_format']); $blog_settings->system->put('time_format',$_POST['time_format']); $blog_settings->system->put('comments_ttl',abs((integer) $_POST['comments_ttl'])); $blog_settings->system->put('trackbacks_ttl',abs((integer) $_POST['trackbacks_ttl'])); $blog_settings->system->put('allow_comments',!empty($_POST['allow_comments'])); $blog_settings->system->put('allow_trackbacks',!empty($_POST['allow_trackbacks'])); $blog_settings->system->put('comments_pub',empty($_POST['comments_pub'])); $blog_settings->system->put('trackbacks_pub',empty($_POST['trackbacks_pub'])); $blog_settings->system->put('comments_nofollow',!empty($_POST['comments_nofollow'])); $blog_settings->system->put('wiki_comments',!empty($_POST['wiki_comments'])); $blog_settings->system->put('comment_preview_optional',!empty($_POST['comment_preview_optional'])); $blog_settings->system->put('enable_xmlrpc',!empty($_POST['enable_xmlrpc'])); $blog_settings->system->put('note_title_tag',$_POST['note_title_tag']); $blog_settings->system->put('nb_post_for_home',$nb_post_for_home); $blog_settings->system->put('nb_post_per_page',$nb_post_per_page); $blog_settings->system->put('use_smilies',!empty($_POST['use_smilies'])); $blog_settings->system->put('no_search',!empty($_POST['no_search'])); $blog_settings->system->put('inc_subcats',!empty($_POST['inc_subcats'])); $blog_settings->system->put('media_img_t_size',$media_img_t_size); $blog_settings->system->put('media_img_s_size',$media_img_s_size); $blog_settings->system->put('media_img_m_size',$media_img_m_size); $blog_settings->system->put('media_img_title_pattern',$_POST['media_img_title_pattern']); $blog_settings->system->put('media_img_use_dto_first',!empty($_POST['media_img_use_dto_first'])); $blog_settings->system->put('media_img_no_date_alone',!empty($_POST['media_img_no_date_alone'])); $blog_settings->system->put('media_img_default_size',$_POST['media_img_default_size']); $blog_settings->system->put('media_img_default_alignment',$_POST['media_img_default_alignment']); $blog_settings->system->put('media_img_default_link',!empty($_POST['media_img_default_link'])); $blog_settings->system->put('nb_post_per_feed',$nb_post_per_feed); $blog_settings->system->put('nb_comment_per_feed',$nb_comment_per_feed); $blog_settings->system->put('short_feed_items',!empty($_POST['short_feed_items'])); if (isset($_POST['robots_policy'])) { $blog_settings->system->put('robots_policy',$_POST['robots_policy']); } $blog_settings->system->put('jquery_version',$_POST['jquery_version']); $blog_settings->system->put('prevents_clickjacking',!empty($_POST['prevents_clickjacking'])); # --BEHAVIOR-- adminBeforeBlogSettingsUpdate $core->callBehavior('adminBeforeBlogSettingsUpdate',$blog_settings); if ($core->auth->isSuperAdmin() && in_array($_POST['url_scan'],$url_scan_combo)) { $blog_settings->system->put('url_scan',$_POST['url_scan']); } dcPage::addSuccessNotice(__('Blog has been successfully updated.')); http::redirect(sprintf($redir,$blog_id)); } catch (Exception $e) { $core->error->add($e->getMessage()); } } if ($standalone) { $breadcrumb = dcPage::breadcrumb( array( html::escapeHTML($blog_name) => '', __('Blog settings') => '' ) ); } else { $breadcrumb = dcPage::breadcrumb( array( __('System') => '', __('Blogs') => $core->adminurl->get("admin.blogs"), __('Blog settings').' : '.html::escapeHTML($blog_name) => '' )); } dcPage::open(__('Blog settings'), '". dcPage::jsConfirmClose('blog-form'). $core->callBehavior('adminPostEditor'). dcPage::jsLoad('js/_blog_pref.js'). # --BEHAVIOR-- adminBlogPreferencesHeaders $core->callBehavior('adminBlogPreferencesHeaders'). dcPage::jsPageTabs(), $breadcrumb ); if ($blog_id) { if (!empty($_GET['add'])) { dcPage::success(__('Blog has been successfully created.')); } if (!empty($_GET['upd'])) { dcPage::success(__('Blog has been successfully updated.')); } echo '
'. '

'.__('Parameters').'

'. '
'; echo '

'.__('Blog details').'

'. $core->formNonce(); if ($core->auth->isSuperAdmin()) { echo '

'. form::field('blog_id',30,32,html::escapeHTML($blog_id)).'

'. '

'.__('At least 2 characters using letters, numbers or symbols.').'

'. '

'.__('Please note that changing your blog ID may require changes in your public index.php file.').'

'; } else { /* Only super admins can change the blog ID and URL, but we need to pass their values to the POST request via hidden html input values so as to allow admins to update other settings. Otherwise dcCore::getBlogCursor() throws an exception. */ echo form::field('blog_id', 30, 32, html::escapeHTML($blog_id), '', '', false, 'hidden="hidden"'); echo form::field('blog_url', 50, 255, html::escapeHTML($blog_url), '', '', false, 'hidden="hidden"'); } echo '

'. form::field('blog_name',30,255,html::escapeHTML($blog_name)).'

'; if ($core->auth->isSuperAdmin()) { echo '

'. form::field('blog_url',50,255,html::escapeHTML($blog_url)).'

'. '

'. form::combo('url_scan',$url_scan_combo,$blog_settings->system->url_scan).'

'; try { # Test URL of blog by testing it's ATOM feed $file = $blog_url.$core->url->getURLFor('feed','atom'); $path = ''; $status = '404'; $content = ''; $client = netHttp::initClient($file,$path); if ($client !== false) { $client->setTimeout(4); $client->setUserAgent($_SERVER['HTTP_USER_AGENT']); $client->get($path); $status = $client->getStatus(); $content = $client->getContent(); } if ($status != '200') { // Might be 404 (URL not found), 670 (blog not online), ... echo '

'. sprintf(__('The URL of blog or the URL scan method might not be well set (%s return a %s status).'), $file,$status). '

'; } else { if (substr($content,0,6) != ''. sprintf(__('The URL of blog or the URL scan method might not be well set (%s does not return an ATOM feed).'), $file). '

'; } } } catch (Exception $e) { $core->error->add($e->getMessage()); } echo '

'. form::combo('blog_status',$status_combo,$blog_status).'

'; } echo '

'. form::textarea('blog_desc',60,5,html::escapeHTML($blog_desc)).'

'. '
'; echo '

'.__('Blog configuration').'

'. '
'. '
'. '

'. form::field('editor',30,255,html::escapeHTML($blog_settings->system->editor)). '

'. '

'. form::combo('lang',$lang_combo,$blog_settings->system->lang,'l10n'). '

'. '

'. form::combo('blog_timezone',dt::getZones(true,true),html::escapeHTML($blog_settings->system->blog_timezone)). '

'. '

'. form::field('copyright_notice',30,255,html::escapeHTML($blog_settings->system->copyright_notice)). '

'. '
'. '
'. '

'. form::combo('post_url_format',$post_url_combo,html::escapeHTML($blog_settings->system->post_url_format)). '

'. '

'. form::combo('note_title_tag',$note_title_tag_combo,$blog_settings->system->note_title_tag). '

'. '

'.'

'; echo '

'.__('XML/RPC interface allows you to edit your blog with an external client.').'

'; if ($blog_settings->system->enable_xmlrpc) { echo '

'.__('XML/RPC interface is active. You should set the following parameters on your XML/RPC client:').'

'. '
    '. '
  • '.__('Server URL:').' '. sprintf(DC_XMLRPC_URL,$core->blog->url,$core->blog->id). '
  • '. '
  • '.__('Blogging system:').' Movable Type
  • '. '
  • '.__('User name:').' '.$core->auth->userID().'
  • '. '
  • '.__('Password:').' <'.__('your password').'>
  • '. '
  • '.__('Blog ID:').' 1
  • '. '
'; } echo '
'. '
'. '
'. //Opera sucks '
'; echo '

'.__('Comments and trackbacks').'

'. '
'. '
'. '

'. '

'. '

'. '

'.__('No limit: leave blank.').'

'. '

'. '

'. '
'. '
'. '

'. '

'. '

'. '

'.__('No limit: leave blank.').'

'. '

'. '
'. '
'. //Opera sucks '
'. '
'. //Opera sucks '
'; echo '

'.__('Blog presentation').'

'. '
'. '
'. '

'. form::field('date_format',30,255,html::escapeHTML($blog_settings->system->date_format)). form::combo('date_format_select',$date_formats_combo,'','','',false,'title="'.__('Pattern of date').'"'). '

'. '

'.__('Sample:').' '.dt::str(html::escapeHTML($blog_settings->system->date_format)).'

'. '

'. form::field('time_format',30,255,html::escapeHTML($blog_settings->system->time_format)). form::combo('time_format_select',$time_formats_combo,'','','',false,'title="'.__('Pattern of time').'"'). '

'. '

'.__('Sample:').' '.dt::str(html::escapeHTML($blog_settings->system->time_format)).'

'. '

'. '

'. '
'. '
'. '

'. '

'. '

'. '

'. '

'. '

'. '
'. '
'. '
'. //Opera sucks '
'; echo '

'.__('Media and images').'

'. '

'. __('Please note that if you change current settings bellow, they will now apply to all new images in the media manager.'). ' '.__('Be carefull if you share it with other blogs in your installation.').'

'. '
'. '
'. '
'.__('Generated image sizes (in pixels)').'
'. '

'. form::field('media_img_t_size',3,3,$blog_settings->system->media_img_t_size).'

'. '

'. form::field('media_img_s_size',3,3,$blog_settings->system->media_img_s_size).'

'. '

'. form::field('media_img_m_size',3,3,$blog_settings->system->media_img_m_size).'

'. '
'. '
'. '
'.__('Default image insertion attributes').'
'. '

'. form::combo('media_img_title_pattern',$img_title_combo,html::escapeHTML($blog_settings->system->media_img_title_pattern)).'

'. '

'. '

'. '

'.__('It is retrieved from the picture\'s metadata.').'

'. '

'. form::combo('media_img_default_size',$img_default_size_combo, (html::escapeHTML($blog_settings->system->media_img_default_size) != '' ? html::escapeHTML($blog_settings->system->media_img_default_size) : 'm')). '

'. '

'. form::combo('media_img_default_alignment',$img_default_alignment_combo,html::escapeHTML($blog_settings->system->media_img_default_alignment)). '

'. '

'. '
'. '
'. '
'. //Opera sucks '
'; echo '

'.__('Search engines robots policy').'

'; $i = 0; foreach ($robots_policy_options as $k => $v) { echo '

'; $i++; } echo '
'; echo '

'.__('jQuery javascript library').'

'. '

'.' '. form::combo('jquery_version',$jquery_versions_combo,$blog_settings->system->jquery_version). '

'. '
'. //Opera sucks '
'; echo '

'.__('Blog security').'

'. '

'. '
'. //Opera sucks '
'; # --BEHAVIOR-- adminBlogPreferencesForm $core->callBehavior('adminBlogPreferencesForm',$core,$blog_settings); echo '

'. (!$standalone ? form::hidden('id',$blog_id) : ''). '

'. '
'; if ($core->auth->isSuperAdmin() && $blog_id != $core->blog->id) { echo '
'. '

'. form::hidden(array('blog_id'),$blog_id). $core->formNonce().'

'. '
'; } else { if ($blog_id == $core->blog->id) { echo '

'.__('The current blog cannot be deleted.').'

'; } else { echo '

'.__('Only superadmin can delete a blog.').'

'; } } echo '
'; # # Users on the blog (with permissions) $blog_users = $core->getBlogPermissions($blog_id,$core->auth->isSuperAdmin()); $perm_types = $core->auth->getPermissionsTypes(); echo '
'. '

'.__('Users on this blog').'

'; if (empty($blog_users)) { echo '

'.__('No users').'

'; } else { if ($core->auth->isSuperAdmin()) { $user_url_p = ' '%1$s'),'&',true).'">%1$s'; } else { $user_url_p = '%1$s'; } # Sort users list on user_id key ksort($blog_users); $post_type = $core->getPostTypes(); $current_blog_id = $core->blog->id; if ($blog_id != $core->blog->id) { $core->setBlog($blog_id); } foreach ($blog_users as $k => $v) { if (count($v['p']) > 0) { echo '
'. '

'.sprintf($user_url_p,html::escapeHTML($k)). ' ('.html::escapeHTML(dcUtils::getUserCN( $k, $v['name'], $v['firstname'], $v['displayname'] )).')

'; if ($core->auth->isSuperAdmin()) { echo '

'.__('Email:').' '. ($v['email'] != '' ? ''.$v['email'].'' : __('(none)')). '

'; } echo '
'.__('Publications on this blog:').'
'. '
    '; foreach ($post_type as $type => $pt_info) { $params = array( 'post_type' => $type, 'user_id' => $k ); echo '
  • '.sprintf(__('%1$s: %2$s'),__($pt_info['label']),$core->blog->getPosts($params,true)->f(0)).'
  • '; } echo '
'; echo '
'.__('Permissions:').'
'. '
    '; if ($v['super']) { echo '
  • '.__('Super administrator').'
    '. ''.__('All rights on all blogs.').'
  • '; } else { foreach ($v['p'] as $p => $V) { if (isset($perm_types[$p])) { echo '
  • '.__($perm_types[$p]); } else { echo '
  • '.sprintf(__('[%s] (unreferenced permission)'),$p); } if($p == 'admin') { echo '
    '.__('All rights on this blog.').''; } echo '
  • '; } } echo '
'; if (!$v['super'] && $core->auth->isSuperAdmin()) { echo '
'. '

'. form::hidden(array('redir'),$core->adminurl->get("admin.blog.pref",array('id' => $k),'&')). form::hidden(array('action'),'perms'). form::hidden(array('users[]'),$k). form::hidden(array('blogs[]'),$blog_id). $core->formNonce(). '

'. '
'; } echo '
'; } } if ($current_blog_id != $core->blog->id) { $core->setBlog($current_blog_id); } } echo '
'; } dcPage::helpBlock('core_blog_pref'); dcPage::close(); dotclear-2.8.0+dfsg/admin/blog_theme.php000066400000000000000000000145151256530234200201530ustar00rootroot00000000000000themes = new dcThemes($core); $core->themes->loadModules($core->blog->themes_path, null); # -- Page helper -- $list = new adminThemesList( $core->themes, $core->blog->themes_path, $core->blog->settings->system->store_theme_url ); adminThemesList::$distributed_modules = explode(',', DC_DISTRIB_THEMES); # -- Theme screenshot -- if (!empty($_GET['shot']) && $list->modules->moduleExists($_GET['shot'])) { $f= path::real(empty($_GET['src']) ? $core->blog->themes_path.'/'.$_GET['shot'].'/screenshot.jpg' : $core->blog->themes_path.'/'.$_GET['shot'].'/'.path::clean($_GET['src']) ); if (!file_exists($f)) { $f = dirname(__FILE__).'/images/noscreenshot.png'; } http::cache(array_merge(array($f), get_included_files())); header('Content-Type: '.files::getMimeType($f)); header('Content-Length: '.filesize($f)); readfile($f); exit; } # -- Display module configuration page -- if ($list->setConfiguration($core->blog->settings->system->theme)) { # Get content before page headers include $list->includeConfiguration(); # Gather content $list->getConfiguration(); # Display page dcPage::open(__('Blog appearance'), dcPage::jsPageTabs(). dcPage::jsColorPicker(). # --BEHAVIOR-- themesToolsHeaders $core->callBehavior('themesToolsHeaders', $core, true), dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', __('Blog appearance') => $list->getURL('',false), ''.__('Theme configuration').'' => '' )) ); # Display previously gathered content $list->displayConfiguration(); dcPage::helpBlock('core_blog_theme_conf'); dcPage::close(); # Stop reading code here return; } # -- Execute actions -- try { $list->doActions(); } catch (Exception $e) { $core->error->add($e->getMessage()); } # -- Page header -- dcPage::open(__('Themes management'), dcPage::jsLoad('js/_blog_theme.js'). dcPage::jsPageTabs(). dcPage::jsColorPicker(). # --BEHAVIOR-- themesToolsHeaders $core->callBehavior('themesToolsHeaders', $core, false), dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', ''.__('Blog appearance').'' => '' )) ); # -- Display modules lists -- if ($core->auth->isSuperAdmin()) { # Updated modules from repo $modules = $list->store->get(true); if (!empty($modules)) { echo '
'. '

'.html::escapeHTML(__('Update themes')).'

'. '

'.sprintf( __('There is one theme to update available from repository.', 'There are %s themes to update available from repository.', count($modules)), count($modules) ).'

'; $list ->setList('theme-update') ->setTab('themes') ->setModules($modules) ->displayModules( /*cols */ array('checkbox', 'name', 'sshot', 'desc', 'author', 'version', 'current_version', 'parent'), /* actions */ array('update', 'delete') ); echo '

'.sprintf( __("Visit %s repository, the resources center for Dotclear."), 'Dotaddict' ). '

'. '
'; } } # Activated modules $modules = $list->modules->getModules(); if (!empty($modules)) { echo '
'. '

'.__('Installed themes').'

'. '

'.__('You can configure and manage installed themes from this list.').'

'; $list ->setList('theme-activate') ->setTab('themes') ->setModules($modules) ->displayModules( /* cols */ array('sshot', 'distrib', 'name', 'config', 'desc', 'author', 'version', 'parent'), /* actions */ array('select', 'behavior', 'deactivate', 'delete') ); echo '
'; } # Deactivated modules $modules = $list->modules->getDisabledModules(); if (!empty($modules)) { echo '
'. '

'.__('Deactivated themes').'

'. '

'.__('Deactivated themes are installed but not usable. You can activate them from here.').'

'; $list ->setList('theme-deactivate') ->setTab('themes') ->setModules($modules) ->displayModules( /* cols */ array('name', 'distrib'), /* actions */ array('activate', 'delete') ); echo '
'; } if ($core->auth->isSuperAdmin() && $list->isWritablePath()) { # New modules from repo $search = $list->getSearch(); $modules = $search ? $list->store->search($search) : $list->store->get(); if (!empty($search) || !empty($modules)) { echo '
'. '

'.__('Add themes from repository').'

'; // '

'.__('Search and install themes directly from repository.').'

'; $list ->setList('theme-new') ->setTab('new') ->setModules($modules) ->displaySearch() ->displayIndex() ->displayModules( /* cols */ array('expander', 'sshot', 'name', 'score', 'config', 'desc', 'author', 'version', 'parent', 'details', 'support'), /* actions */ array('install'), /* nav limit */ true ); echo '

'.sprintf( __("Visit %s repository, the resources center for Dotclear."), 'Dotaddict' ). '

'. '
'; } # Add a new plugin echo '
'. '

'.__('Add themes from a package').'

'. '

'.__('You can install themes by uploading or downloading zip files.').'

'; $list->displayManualForm(); echo '
'; } # --BEHAVIOR-- themesToolsTabs $core->callBehavior('themesToolsTabs', $core); # -- Notice for super admin -- if ($core->auth->isSuperAdmin() && !$list->isWritablePath()) { echo '

'.__('Some functions are disabled, please give write access to your themes directory to enable them.').'

'; } dcPage::helpBlock('core_blog_theme'); dcPage::close(); dotclear-2.8.0+dfsg/admin/blogs.php000066400000000000000000000143461256530234200171560ustar00rootroot00000000000000 'blog_upddt', __('Blog name') => 'UPPER(blog_name)', __('Blog ID') => 'B.blog_id' ); $order_combo = array( __('Descending') => 'desc', __('Ascending') => 'asc' ); $q = !empty($_GET['q']) ? $_GET['q'] : ''; $sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'blog_upddt'; $order = !empty($_GET['order']) ? $_GET['order'] : 'desc'; $show_filters = false; $page = !empty($_GET['page']) ? max(1,(integer) $_GET['page']) : 1; $nb_per_page = 30; if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { if ($nb_per_page != $_GET['nb']) { $show_filters = true; } $nb_per_page = (integer) $_GET['nb']; } # - Search filter if ($q) { $params['q'] = $q; $show_filters = true; } # - Sortby and order filter if ($sortby !== '' && in_array($sortby,$sortby_combo)) { if ($order !== '' && in_array($order,$order_combo)) { $params['order'] = $sortby.' '.$order; } if ($sortby != 'blog_upddt' || $order != 'desc') { $show_filters = true; } } $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); try { $counter = $core->getBlogs($params,1); $rs = $core->getBlogs($params); $nb_blog = $counter->f(0); } catch (Exception $e) { $core->error->add($e->getMessage()); } /* DISPLAY -------------------------------------------------------- */ $form_filter_title = __('Show filters and display options'); $starting_script = dcPage::jsLoad('js/filter-controls.js'); $starting_script .= '"; dcPage::open(__('List of blogs'),$starting_script, dcPage::breadcrumb( array( __('System') => '', __('List of blogs') => '' )) ); if (!empty($_GET['del'])) { dcPage::success(__('Blog has been successfully deleted.')); } if (!$core->error->flag()) { if ($core->auth->isSuperAdmin()) { echo '

'.__('Create a new blog').'

'; } echo '
'. ''. '
'. '
'. '

'.__('Filters').'

'. '

'. form::field('q',20,255,html::escapeHTML($q)).'

'. '
'. '
'. '

'.__('Display options').'

'. '

'. form::combo('sortby',$sortby_combo,html::escapeHTML($sortby)).'

'. '

'. form::combo('order',$order_combo,html::escapeHTML($order)).'

'. '

'.__('Show').'

'. '
'. '
'. '

'. '

'. //Opera sucks '
'; # Show blogs if ($nb_blog == 0) { if( $show_filters ) { echo '

'.__('No blog matches the filter').'

'; } else { echo '

'.__('No blog').'

'; } } else { $pager = new dcPager($page,$nb_blog,$nb_per_page,10); echo $pager->getLinks(); echo '
'. ''; if( $show_filters ) { echo ''; } else { echo ''; } echo ''. ''. ''. ''. ''. ''. ''. ''; while ($rs->fetch()) { echo blogLine($rs); } echo '
'.sprintf(__('%d blog matches the filter.','%d blogs match the filter.',$nb_blog),$nb_blog).'
'.__('Blog id').''.__('Blog name').''.__('URL').''.__('Entries (all types)').''.__('Last update').''.__('Status').'
'; echo $pager->getLinks(); } } dcPage::helpBlock('core_blogs'); dcPage::close(); function blogLine($rs) { global $core; $blog_id = html::escapeHTML($rs->blog_id); $edit_link = ''; if ($GLOBALS['core']->auth->isSuperAdmin()) { $edit_link = ' $blog_id)).'" title="'.sprintf(__('Edit blog settings for %s'),$blog_id).'">'. ''.__('Edit blog settings').' '.$blog_id.' '; } else { $edit_link = $blog_id; } $img_status = $rs->blog_status == 1 ? 'check-on' : ($rs->blog_status == 0 ? 'check-off' : 'check-wrn'); $txt_status = $GLOBALS['core']->getBlogStatus($rs->blog_status); $img_status = sprintf('%2$s',$img_status,$txt_status); $offset = dt::getTimeOffset($core->auth->getInfo('user_tz')); $blog_upddt = dt::str(__('%Y-%m-%d %H:%M'),strtotime($rs->blog_upddt) + $offset); return ''. ''.$edit_link.''. ' $rs->blog_id)).'" '. 'title="'.sprintf(__('Switch to blog %s'),$rs->blog_id).'">'. html::escapeHTML($rs->blog_name).''. ''.html::escapeHTML($rs->blog_url). ' '. ''.$core->countBlogPosts($rs->blog_id).''. ''.$blog_upddt.''. ''.$img_status.''. ''; } dotclear-2.8.0+dfsg/admin/categories.php000066400000000000000000000157011256530234200201710ustar00rootroot00000000000000blog->getCategory((integer) $cat_id); if ($c->isEmpty()) { dcPage::addErrorNotice(__('This category does not exist.')); $core->adminurl->redirect("admin.categories"); } $name = $c->cat_title; unset($c); try { # Delete category $core->blog->delCategory($cat_id); dcPage::addSuccessNotice(sprintf(__('The category "%s" has been successfully deleted.'),html::escapeHTML($name))); $core->adminurl->redirect("admin.categories"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # move post into a category if (!empty($_POST['mov']) && !empty($_POST['mov_cat'])) { try { # Check if category where to move posts exists $keys = array_keys($_POST['mov']); $cat_id = (int) $keys[0]; $mov_cat = (int) $_POST['mov_cat'][$cat_id]; $mov_cat = $mov_cat ? $mov_cat : null; if ($mov_cat !== null) { $c = $core->blog->getCategory($mov_cat); if ($c->isEmpty()) { throw new Exception(__('Category where to move posts does not exist')); } $name = $c->cat_title; unset($c); } # Move posts if ($mov_cat != $cat_id) { $core->blog->changePostsCategory($cat_id,$mov_cat); } dcPage::addSuccessNotice(sprintf(__('The entries have been successfully moved to category "%s"'), html::escapeHTML($name))); $core->adminurl->redirect("admin.categories"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Update order if (!empty($_POST['save_order']) && !empty($_POST['categories_order'])) { $categories = json_decode($_POST['categories_order']); foreach ($categories as $category) { if (!empty($category->item_id) && !empty($category->left) && !empty($category->right)) { $core->blog->updCategoryPosition($category->item_id, $category->left, $category->right); } } dcPage::addSuccessNotice(__('Categories have been successfully reordered.')); $core->adminurl->redirect("admin.categories"); } # Reset order if (!empty($_POST['reset'])) { try { $core->blog->resetCategoriesOrder(); dcPage::addSuccessNotice(__('Categories order has been successfully reset.')); $core->adminurl->redirect("admin.categories"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } /* Display -------------------------------------------------------- */ $rs = $core->blog->getCategories(array('post_type'=>'post')); $starting_script = ""; $core->auth->user_prefs->addWorkspace('accessibility'); if (!$core->auth->user_prefs->accessibility->nodragdrop && $core->auth->check('categories',$core->blog->id) && $rs->count()>1) { $starting_script .= dcPage::jsLoad('js/jquery/jquery-ui.custom.js'); $starting_script .= dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js'); $starting_script .= dcPage::jsLoad('js/jquery/jquery.mjs.nestedSortable.js'); } $starting_script .= dcPage::jsConfirmClose('form-categories'); $starting_script .= dcPage::jsLoad('js/_categories.js'); dcPage::open(__('Categories'),$starting_script, dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', __('Categories') => '' )) ); if (!empty($_GET['del'])) { dcPage::success(__('The category has been successfully removed.')); } if (!empty($_GET['reord'])) { dcPage::success(__('Categories have been successfully reordered.')); } if (!empty($_GET['move'])) { dcPage::success(__('Entries have been successfully moved to the category you choose.')); } $categories_combo = dcAdminCombos::getCategoriesCombo($rs); echo '

'.__('New category').'

'; echo '
'; if ($rs->isEmpty()) { echo '

'.__('No category so far.').'

'; } else { echo '
'. '
'; $ref_level = $level = $rs->level-1; while ($rs->fetch()) { $attr = 'id="cat_'.$rs->cat_id.'" class="cat-line clearfix"'; if ($rs->level > $level) { echo str_repeat('
  • ',$rs->level - $level); } elseif ($rs->level < $level) { echo str_repeat('
',-($rs->level - $level)); } if ($rs->level <= $level) { echo '
  • '; } echo '

    '. '

    ( $rs->cat_id)).'">'. sprintf(($rs->nb_post > 1 ? __('%d entries') : __('%d entry') ),$rs->nb_post).''. ', '.__('total:').' '.$rs->nb_total.')

    '. '

    '.__('URL:').' '.html::escapeHTML($rs->cat_url).'

    '; echo '

    '; if ($rs->nb_total>0) { // remove current category echo ' '. form::combo(array('mov_cat['.$rs->cat_id.']', 'mov_cat_'.$rs->cat_id),array_filter($categories_combo, create_function('$cat', 'return $cat->value!=$GLOBALS[\'rs\']->cat_id;')),'',''). ' '; $attr_disabled = ' disabled="disabled"'; $input_class = 'disabled '; } else { $attr_disabled = ''; $input_class = ''; } echo ' '. '

    '; $level = $rs->level; } if ($ref_level - $level < 0) { echo str_repeat('
  • ',-($ref_level - $level)); } echo '
    '; echo '
    '; if ($core->auth->check('categories',$core->blog->id) && $rs->count()>1) { if (!$core->auth->user_prefs->accessibility->nodragdrop) { echo '

    '.__('To rearrange categories order, move items by drag and drop, then click on “Save categories order” button.').'

    '; } echo '

    '. ''. ''. ' '; } else { echo '

    '; } echo ''. $core->formNonce().'

    '. '
    '; } echo '
    '; dcPage::helpBlock('core_categories'); dcPage::close(); dotclear-2.8.0+dfsg/admin/category.php000066400000000000000000000170321256530234200176600ustar00rootroot00000000000000blog->getCategory($_REQUEST['id']); } catch (Exception $e) { $core->error->add($e->getMessage()); } if (!$core->error->flag() && !$rs->isEmpty()) { $cat_id = (integer) $rs->cat_id; $cat_title = $rs->cat_title; $cat_url = $rs->cat_url; $cat_desc = $rs->cat_desc; } unset($rs); # Getting hierarchy information $parents = $core->blog->getCategoryParents($cat_id); $rs = $core->blog->getCategoryParent($cat_id); $cat_parent = $rs->isEmpty() ? 0 : (integer) $rs->cat_id; unset($rs); # Allowed parents list $children = $core->blog->getCategories(array('post_type'=>'post','start'=>$cat_id)); $allowed_parents = array(__('Top level')=>0); $p = array(); while ($children->fetch()) { $p[$children->cat_id] = 1; } $rs = $core->blog->getCategories(array('post_type'=>'post')); while ($rs->fetch()) { if (!isset($p[$rs->cat_id])) { $allowed_parents[] = new formSelectOption( str_repeat('  ',$rs->level-1).($rs->level-1 == 0 ? '' : '• ').html::escapeHTML($rs->cat_title), $rs->cat_id ); } } unset($rs); # Allowed siblings list $siblings = array(); $rs = $core->blog->getCategoryFirstChildren($cat_parent); while ($rs->fetch()) { if ($rs->cat_id != $cat_id) { $siblings[html::escapeHTML($rs->cat_title)] = $rs->cat_id; } } unset($rs); } # Changing parent if ($cat_id && isset($_POST['cat_parent'])) { $new_parent = (integer) $_POST['cat_parent']; if ($cat_parent != $new_parent) { try { $core->blog->setCategoryParent($cat_id,$new_parent); dcPage::addSuccessNotice(__('The category has been successfully moved')); $core->adminurl->redirect("admin.categories"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } } # Changing sibling if ($cat_id && isset($_POST['cat_sibling'])) { try { $core->blog->setCategoryPosition($cat_id,(integer) $_POST['cat_sibling'],$_POST['cat_move']); dcPage::addSuccessNotice(__('The category has been successfully moved')); $core->adminurl->redirect("admin.categories"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Create or update a category if (isset($_POST['cat_title'])) { $cur = $core->con->openCursor($core->prefix.'category'); $cur->cat_title = $cat_title = $_POST['cat_title']; if (isset($_POST['cat_desc'])) { $cur->cat_desc = $cat_desc = $_POST['cat_desc']; } if (isset($_POST['cat_url'])) { $cur->cat_url = $cat_url = $_POST['cat_url']; } else { $cur->cat_url = $cat_url; } try { # Update category if ($cat_id) { # --BEHAVIOR-- adminBeforeCategoryUpdate $core->callBehavior('adminBeforeCategoryUpdate',$cur,$cat_id); $core->blog->updCategory($_POST['id'],$cur); # --BEHAVIOR-- adminAfterCategoryUpdate $core->callBehavior('adminAfterCategoryUpdate',$cur,$cat_id); dcPage::addSuccessNotice(__('The category has been successfully updated.')); $core->adminurl->redirect("admin.category",array('id' => $_POST['id'])); } # Create category else { # --BEHAVIOR-- adminBeforeCategoryCreate $core->callBehavior('adminBeforeCategoryCreate',$cur); $id = $core->blog->addCategory($cur,(integer) $_POST['new_cat_parent']); # --BEHAVIOR-- adminAfterCategoryCreate $core->callBehavior('adminAfterCategoryCreate',$cur,$id); dcPage::addSuccessNotice(sprintf(__('The category "%s" has been successfully created.'), html::escapeHTML($cur->cat_title))); $core->adminurl->redirect("admin.categories"); } } catch (Exception $e) { $core->error->add($e->getMessage()); } } $title = $cat_id ? html::escapeHTML($cat_title) : __('New category'); $elements = array( html::escapeHTML($core->blog->name) => '', __('Categories') => $core->adminurl->get("admin.categories") ); if ($cat_id) { while($parents->fetch()) { $elements[html::escapeHTML($parents->cat_title)] = $core->adminurl->get("admin.category",array('id'=> $parents->cat_id)); } } $elements[$title] = ''; $category_editor = $core->auth->getOption('editor'); dcPage::open($title, dcPage::jsConfirmClose('category-form'). dcPage::jsLoad('js/_category.js'). $core->callBehavior('adminPostEditor',$category_editor['xhtml'],'category',array('#cat_desc'),'xhtml'), dcPage::breadcrumb($elements) ); if (!empty($_GET['upd'])) { dcPage::success(__('Category has been successfully updated.')); } echo '
    '. '

    '.__('Category information').'

    '. '

    '. form::field('cat_title',40,255,html::escapeHTML($cat_title)). '

    '; if (!$cat_id) { $rs = $core->blog->getCategories(array('post_type'=>'post')); echo '

    '; unset($rs); } echo '
    '. '

    ' .form::field('cat_url',40,255,html::escapeHTML($cat_url)). '

    '. '

    '. __('Warning: If you set the URL manually, it may conflict with another category.').'

    '. '
    '. '

    '. form::textarea('cat_desc',50,8,html::escapeHTML($cat_desc)). '

    '. '

    '. ($cat_id ? form::hidden('id',$cat_id) : ''). $core->formNonce(). '

    '. '
    '; if ($cat_id) { echo '

    '.__('Move this category').'

    '. '
    '. '
    '. '
    '. '

    '.__('Category parent').'

    '. '

    '. form::combo('cat_parent',$allowed_parents,$cat_parent).'

    '. '

    '. form::hidden(array('id'),$cat_id).$core->formNonce().'

    '. '
    '. '
    '; if (count($siblings) > 0) { echo '
    '. '
    '. '

    '.__('Category sibling').'

    '. '

    '. form::combo('cat_move',array(__('before')=>'before',__('after')=>'after'),'','','',false,'title="'.__('position: ').'"').' '. form::combo('cat_sibling',$siblings).'

    '. '

    '. form::hidden(array('id'),$cat_id).$core->formNonce().'

    '. '
    '. '
    '; } echo '
    '; } dcPage::helpBlock('core_category'); dcPage::close(); dotclear-2.8.0+dfsg/admin/comment.php000066400000000000000000000170211256530234200175030ustar00rootroot00000000000000auth->getOption('editor'); # Status combo $status_combo = dcAdminCombos::getCommentStatusescombo(); # Adding comment if (!empty($_POST['add']) && !empty($_POST['post_id'])) { try { $rs = $core->blog->getPosts(array('post_id' => $_POST['post_id'], 'post_type' => '')); if ($rs->isEmpty()) { throw new Exception(__('Entry does not exist.')); } $cur = $core->con->openCursor($core->prefix.'comment'); $cur->comment_author = $_POST['comment_author']; $cur->comment_email = html::clean($_POST['comment_email']); $cur->comment_site = html::clean($_POST['comment_site']); $cur->comment_content = $core->HTMLfilter($_POST['comment_content']); $cur->post_id = (integer) $_POST['post_id']; # --BEHAVIOR-- adminBeforeCommentCreate $core->callBehavior('adminBeforeCommentCreate',$cur); $comment_id = $core->blog->addComment($cur); # --BEHAVIOR-- adminAfterCommentCreate $core->callBehavior('adminAfterCommentCreate',$cur,$comment_id); dcPage::addSuccessNotice(__('Comment has been successfully created.')); http::redirect($core->getPostAdminURL($rs->post_type,$rs->post_id,false).'&co=1'); } catch (Exception $e) { $core->error->add($e->getMessage()); } } if (!empty($_REQUEST['id'])) { $params['comment_id'] = $_REQUEST['id']; try { $rs = $core->blog->getComments($params); if (!$rs->isEmpty()) { $comment_id = $rs->comment_id; $post_id = $rs->post_id; $post_type = $rs->post_type; $post_title = $rs->post_title; $comment_dt = $rs->comment_dt; $comment_author = $rs->comment_author; $comment_email = $rs->comment_email; $comment_site = $rs->comment_site; $comment_content = $rs->comment_content; $comment_ip = $rs->comment_ip; $comment_status = $rs->comment_status; $comment_trackback = (boolean) $rs->comment_trackback; $comment_spam_status = $rs->comment_spam_status; } } catch (Exception $e) { $core->error->add($e->getMessage()); } } if (!$comment_id && !$core->error->flag()) { $core->error->add(__('No comments')); } if (!$core->error->flag() && isset($rs)) { $can_edit = $can_delete = $can_publish = $core->auth->check('contentadmin',$core->blog->id); if (!$core->auth->check('contentadmin',$core->blog->id) && $core->auth->userID() == $rs->user_id) { $can_edit = true; if ($core->auth->check('delete',$core->blog->id)) { $can_delete = true; } if ($core->auth->check('publish',$core->blog->id)) { $can_publish = true; } } # update comment if (!empty($_POST['update']) && $can_edit) { $cur = $core->con->openCursor($core->prefix.'comment'); $cur->comment_author = $_POST['comment_author']; $cur->comment_email = html::clean($_POST['comment_email']); $cur->comment_site = html::clean($_POST['comment_site']); $cur->comment_content = $core->HTMLfilter($_POST['comment_content']); if (isset($_POST['comment_status'])) { $cur->comment_status = (integer) $_POST['comment_status']; } try { # --BEHAVIOR-- adminBeforeCommentUpdate $core->callBehavior('adminBeforeCommentUpdate',$cur,$comment_id); $core->blog->updComment($comment_id,$cur); # --BEHAVIOR-- adminAfterCommentUpdate $core->callBehavior('adminAfterCommentUpdate',$cur,$comment_id); dcPage::addSuccessNotice(__('Comment has been successfully updated.')); $core->adminurl->redirect("admin.comment",array('id' => $comment_id)); } catch (Exception $e) { $core->error->add($e->getMessage()); } } if (!empty($_POST['delete']) && $can_delete) { try { # --BEHAVIOR-- adminBeforeCommentDelete $core->callBehavior('adminBeforeCommentDelete',$comment_id); $core->blog->delComment($comment_id); dcPage::addSuccessNotice(__('Comment has been successfully deleted.')); http::redirect($core->getPostAdminURL($rs->post_type,$rs->post_id).'&co=1',false); } catch (Exception $e) { $core->error->add($e->getMessage()); } } if (!$can_edit) { $core->error->add(__("You can't edit this comment.")); } } /* DISPLAY -------------------------------------------------------- */ if ($comment_id) { $breadcrumb = dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', html::escapeHTML($post_title) => $core->getPostAdminURL($post_type,$post_id).'&co=1#c'.$comment_id, __('Edit comment') => '' )); } else { $breadcrumb = dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', html::escapeHTML($post_title) => $core->getPostAdminURL($post_type,$post_id), __('Edit comment') => '' )); } dcPage::open(__('Edit comment'), dcPage::jsConfirmClose('comment-form'). dcPage::jsLoad('js/_comment.js'). $core->callBehavior('adminPostEditor',$comment_editor['xhtml'],'comment',array('#comment_content'),'xhtml'). # --BEHAVIOR-- adminCommentHeaders $core->callBehavior('adminCommentHeaders'), $breadcrumb ); if ($comment_id) { if (!empty($_GET['upd'])) { dcPage::success(__('Comment has been successfully updated.')); } $comment_mailto = ''; if ($comment_email) { $comment_mailto = 'getPostURL())) .'">'.__('Send an e-mail').''; } echo '
    '. '
    '. '

    '.__('Information collected').'

    '. '

    '.__('IP address:').' '. ' $comment_ip)).'">'.$comment_ip.'

    '. '

    '.__('Date:').' '. dt::dt2str(__('%Y-%m-%d %H:%M'),$comment_dt).'

    '. '
    '. '

    '.__('Comment submitted').'

    '. '

    '. form::field('comment_author',30,255,html::escapeHTML($comment_author)). '

    '. '

    '. form::field('comment_email',30,255,html::escapeHTML($comment_email)). ''.$comment_mailto.''. '

    '. '

    '. form::field('comment_site',30,255,html::escapeHTML($comment_site)). '

    '. '

    '. form::combo('comment_status',$status_combo,$comment_status,'','',!$can_publish). '

    '. # --BEHAVIOR-- adminAfterCommentDesc $core->callBehavior('adminAfterCommentDesc', $rs). '

    '. form::textarea('comment_content',50,10,html::escapeHTML($comment_content)). '

    '. '

    '.form::hidden('id',$comment_id). $core->formNonce(). ' '; if ($can_delete) { echo ''; } echo '

    '. '
    '; } dcPage::helpBlock('core_comments'); dcPage::close(); dotclear-2.8.0+dfsg/admin/comments.php000066400000000000000000000204101256530234200176620ustar00rootroot00000000000000blog->delJunkComments(); $_SESSION['comments_del_spam'] = true; $core->adminurl->redirect("admin.comments"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Creating filter combo boxes # Filter form we'll put in html_block $status_combo = array_merge( array('-' => ''), dcAdminCombos::getCommentStatusescombo() ); $type_combo = array( '-' => '', __('Comment') => 'co', __('Trackback') => 'tb' ); $sortby_combo = array( __('Date') => 'comment_dt', __('Entry title') => 'post_title', __('Author') => 'comment_author', __('Status') => 'comment_status' ); $order_combo = array( __('Descending') => 'desc', __('Ascending') => 'asc' ); /* Get comments -------------------------------------------------------- */ $author = isset($_GET['author']) ? $_GET['author'] : ''; $status = isset($_GET['status']) ? $_GET['status'] : ''; $type = !empty($_GET['type']) ? $_GET['type'] : ''; $sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'comment_dt'; $order = !empty($_GET['order']) ? $_GET['order'] : 'desc'; $ip = !empty($_GET['ip']) ? $_GET['ip'] : ''; $with_spam = $author || $status || $type || $sortby != 'comment_dt' || $order != 'desc' || $ip; $show_filters = false; $page = !empty($_GET['page']) ? max(1,(integer) $_GET['page']) : 1; $nb_per_page = 30; if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { if ($nb_per_page != $_GET['nb']) { $show_filters = true; } $nb_per_page = (integer) $_GET['nb']; } $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); $params['no_content'] = true; # Author filter if ($author !== '') { $params['q_author'] = $author; $show_filters = true; } else { $author=''; } # - Type filter if ($type == 'tb' || $type == 'co') { $params['comment_trackback'] = ($type == 'tb'); $show_filters = true; } else { $type=''; } # - Status filter if ($status !== '' && in_array($status,$status_combo)) { $params['comment_status'] = $status; $show_filters = true; } elseif (!$with_spam) { $params['comment_status_not'] = -2; $status=''; } else { $status=''; } # - IP filter if ($ip) { $params['comment_ip'] = $ip; $show_filters = true; } // Add some sort order if spams displayed if ($with_spam || ($status == -2)) { $sortby_combo[__('IP')] = 'comment_ip'; $sortby_combo[__('Spam filter')] = 'comment_spam_filter'; } # Sortby and order filter if ($sortby !== '' && in_array($sortby,$sortby_combo)) { if ($order !== '' && in_array($order,$order_combo)) { $params['order'] = $sortby.' '.$order; } else { $order = 'desc'; } if ($sortby != 'comment_dt' || $order != 'desc') { $show_filters = true; } } else { $sortby = 'comment_dt'; $order = 'desc'; } # Actions combo box $combo_action = array(); $default = ''; if ($core->auth->check('delete,contentadmin',$core->blog->id) && $status == -2) { $default = 'delete'; } $comments_actions_page = new dcCommentsActionsPage($core,$core->adminurl->get("admin.comments")); if ($comments_actions_page->process()) { return; } /* Get comments -------------------------------------------------------- */ try { $comments = $core->blog->getComments($params); $counter = $core->blog->getComments($params,true); $comment_list = new adminCommentList($core,$comments,$counter->f(0)); } catch (Exception $e) { $core->error->add($e->getMessage()); } /* DISPLAY -------------------------------------------------------- */ $form_filter_title = __('Show filters and display options'); $starting_script = dcPage::jsLoad('js/_comments.js'); $starting_script .= dcPage::jsLoad('js/filter-controls.js'); $starting_script .= '"; dcPage::open(__('Comments and trackbacks'),$starting_script, dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', __('Comments and trackbacks') => '' )) ); if (!empty($_GET['upd'])) { dcPage::success(__('Selected comments have been successfully updated.')); } elseif (!empty($_GET['del'])) { dcPage::success(__('Selected comments have been successfully deleted.')); } if (!$core->error->flag()) { if (isset($_SESSION['comments_del_spam'])) { dcPage::message(__('Spam comments have been successfully deleted.')); unset($_SESSION['comments_del_spam']); } $spam_count = $core->blog->getComments(array('comment_status'=>-2),true)->f(0); if ($spam_count > 0) { echo '
    '; if (!$with_spam || ($status != -2)) { if ($spam_count == 1) { echo '

    '.sprintf(__('You have one spam comment.'),''.$spam_count.'').' '. ' -2)).'">'.__('Show it.').'

    '; } elseif ($spam_count > 1) { echo '

    '.sprintf(__('You have %s spam comments.'),''.$spam_count.'').' '. ' -2)).'">'.__('Show them.').'

    '; } } echo '

    '. $core->formNonce(). '

    '; # --BEHAVIOR-- adminCommentsSpamForm $core->callBehavior('adminCommentsSpamForm',$core); echo '
    '; } echo '
    '. ''. '
    '. '
    '. '

    '.__('Filters').'

    '. '

    '. form::combo('type',$type_combo,$type).'

    '. '

    '. form::combo('status',$status_combo,$status).'

    '. '
    '. '
    '. '

    '. form::field('author',20,255,html::escapeHTML($author)).'

    '. '

    '. form::field('ip',20,39,html::escapeHTML($ip)).'

    '. '
    '. '
    '. '

    '.__('Display options').'

    '. '

    '. form::combo('sortby',$sortby_combo,$sortby).'

    '. '

    '. form::combo('order',$order_combo,$order).'

    '. '

    Afficher

    '. '
    '. '
    '. '

    '. '

    '. //Opera sucks '
    '; # Show comments $comment_list->display($page,$nb_per_page, '
    '. '%s'. '
    '. '

    '. '

    '. form::combo('action',$comments_actions_page->getCombo(),$default,'','','','title="'.__('Actions').'"'). $core->formNonce(). '

    '. form::hidden(array('type'),$type). form::hidden(array('sortby'),$sortby). form::hidden(array('order'),$order). form::hidden(array('author'),preg_replace('/%/','%%',$author)). form::hidden(array('status'),$status). form::hidden(array('ip'),preg_replace('/%/','%%',$ip)). form::hidden(array('page'),$page). form::hidden(array('nb'),$nb_per_page). '
    '. '
    ', $show_filters, ($with_spam || ($status == -2)) ); } dcPage::helpBlock('core_comments'); dcPage::close(); dotclear-2.8.0+dfsg/admin/comments_actions.php000066400000000000000000000017161256530234200214120ustar00rootroot00000000000000adminurl->get("admin.comments"); $args=array(); } dcPage::check('usage,contentadmin'); $comments_actions_page = new dcCommentsActionsPage($core,$uri,$args); $comments_actions_page->setEnableRedirSelection(false); $comments_actions_page->process(); dotclear-2.8.0+dfsg/admin/help.php000066400000000000000000000041501256530234200167700ustar00rootroot00000000000000 '', 'title' => ''); $args = func_get_args(); if (empty($args)) { return $ret; }; global $__resources; if (empty($__resources['help'])) { return $ret; } $content = ''; $title = ''; foreach ($args as $v) { if (is_object($v) && isset($v->content)) { $content .= $v->content; continue; } if (!isset($__resources['help'][$v])) { continue; } $f = $__resources['help'][$v]; if (!file_exists($f) || !is_readable($f)) { continue; } $fc = file_get_contents($f); if (preg_match('|]*?>(.*?)|ms',$fc,$matches)) { $content .= $matches[1]; if (preg_match('|]*?>(.*?)|ms',$fc,$matches)) { $title = $matches[1]; } } else { $content .= $fc; } } if (trim($content) == '') { return $ret; } $ret['content'] = $content; if ($title != '') { $ret['title'] = $title; } return $ret; } $help_page = !empty($_GET['page']) ? html::escapeHTML($_GET['page']) : 'index'; $content_array = helpPage($help_page); if (($content_array['content'] == '') || ($help_page == 'index')) { $content_array = helpPage('index'); } if ($content_array['title'] != '') { $breadcrumb = dcPage::breadcrumb( array( __('Global help') => $core->adminurl->get("admin.help"), $content_array['title'] => '' )); } else { $breadcrumb = dcPage::breadcrumb( array( __('Global help') => '' )); } /* DISPLAY -------------------------------------------------------- */ dcPage::open(__('Global help'), dcPage::jsPageTabs('first-step'), $breadcrumb ); echo $content_array['content']; // Prevents global help link display $GLOBALS['__resources']['ctxhelp'] = true; dcPage::close(); dotclear-2.8.0+dfsg/admin/images/000077500000000000000000000000001256530234200165745ustar00rootroot00000000000000dotclear-2.8.0+dfsg/admin/images/admin.png000066400000000000000000000004011256530234200203650ustar00rootroot00000000000000PNG  IHDR aIDATxڍ1@D^#p$ckCe!1(a Qi\3$,+C‚L~Y%]E%:9c|j.a[?SkYq-V\ҔWE!b_B5 KH|k}_B?`5|MU":6~6+6ظ7`gae9oBiUIENDB`dotclear-2.8.0+dfsg/admin/images/attach.png000066400000000000000000000002221256530234200205420ustar00rootroot00000000000000PNG  IHDR s;tRNS["KIDATxcǫj%Ӟ`ΧO!@Y$1e{03 s,zR@pIENDB`dotclear-2.8.0+dfsg/admin/images/check-off.png000066400000000000000000000001551256530234200211300ustar00rootroot00000000000000PNG  IHDR Vu\4IDATxc83@ Dkp4OCw7 - =Mx 9imĒLFCIENDB`dotclear-2.8.0+dfsg/admin/images/check-on.png000066400000000000000000000002461256530234200207730ustar00rootroot00000000000000PNG  IHDR Vu\mIDAT(cuP='g A1԰Oه7_"Nñ;oXK50SH 7Q M NT(4-?iO^REIIt*WIENDB`dotclear-2.8.0+dfsg/admin/images/check-wrn.png000066400000000000000000000001321256530234200211570ustar00rootroot00000000000000PNG  IHDR Vu\!IDATxc83@ DCTè$eEIENDB`dotclear-2.8.0+dfsg/admin/images/collapser-hide.png000066400000000000000000000002251256530234200221740ustar00rootroot00000000000000PNG  IHDR )$\IDATxc؄hϹ6W2﾿\0\﯀$6m@= a=sw؃p+n^}0&!Wӟ:c xJIENDB`dotclear-2.8.0+dfsg/admin/images/collapser-show.png000066400000000000000000000002301256530234200222370ustar00rootroot00000000000000PNG  IHDR )$_IDATx!0?ga`]XX]X &ŀɧ{tAm84(f|  4Ps(enIA{6@$kb/_IENDB`dotclear-2.8.0+dfsg/admin/images/comments.png000066400000000000000000000003421256530234200211260ustar00rootroot00000000000000PNG  IHDR/\IDAT8c` =} x='k|$͸0J Av6C H08u@N퇆'u04(UAPI1-\ry,V D(J*^uECѓL G8'& @ 9ǫG`06}x] +ÇIENDB`dotclear-2.8.0+dfsg/admin/images/date-picker.png000066400000000000000000000011311256530234200214660ustar00rootroot00000000000000PNG  IHDRw= IDATxœkQŋEbEQ(nwR\XI+"{)jn4RE% QCi65M:I&xE&d&߹_Μ3YL<isZd6mc@[)w3foWf^=G)98$]ASx,_m-uօ!$z!q0d/Z> w ;gR<ٲ (RwF(Ǒ;@D]h?r(]*YǛ"A7 EfJ/1{z,f4:쬍PHd+uWV$n?L~w')0UetWW@RS(a.X.B sAq a.(Tr!f 0/i$s^PƂmYɐzc_~w SV@dH7x YGrp_LZvԴKエd] T޿>iPfIENDB`dotclear-2.8.0+dfsg/admin/images/disabled_down.png000066400000000000000000000002311256530234200220740ustar00rootroot00000000000000PNG  IHDRH-`IDAT(c`شiGC]#PB h,@W@E1.nkp9y=MǢ $&@(T =FbSOR|f6^ 􉳱IENDB`dotclear-2.8.0+dfsg/admin/images/disabled_up.png000066400000000000000000000002261256530234200215550ustar00rootroot00000000000000PNG  IHDRAZ]IDATxc l ȀII%@=&)>T?%*(% r0aDRa |d:% "4{RyIENDB`dotclear-2.8.0+dfsg/admin/images/dotclear_pw.png000066400000000000000000000006431256530234200216100ustar00rootroot00000000000000PNG  IHDRשPLTEBĸԺ]\OǷSoߥ୲C|Z(9ݜݰ@Ff=vеMxi~ۋPѽfۓ5ftRNS0`"IDATx^Gn0 PIu驽x,# oDBf/dz.*Gܥ0NCTo_B*K\^x10l976.GOARM؟p qc?#fW2Hl<$o/8'KAVӆ1\=oc {z93IENDB`dotclear-2.8.0+dfsg/admin/images/down.png000066400000000000000000000002301256530234200202440ustar00rootroot00000000000000PNG  IHDRH-_IDAT(c`HϫphakJ(@5pH (ƅmm BS.'ǣi?X4Gh@lI@Ҕ@jқ -X`IENDB`dotclear-2.8.0+dfsg/admin/images/edit-mini.png000066400000000000000000000002601256530234200211570ustar00rootroot00000000000000PNG  IHDR Vu\wIDAT(c` 0 @~  \{?j ='@54b4?[2 A|)9&O}&j`hW410UlOk TlKjIENDB`dotclear-2.8.0+dfsg/admin/images/expand.png000066400000000000000000000002431256530234200205600ustar00rootroot00000000000000PNG  IHDR N(tRNS7X}XIDATxcXl um ǎ&MS<h۶M߿åz;_BW)ھm; 8~ *04Z(9IENDB`dotclear-2.8.0+dfsg/admin/images/favicon.ico000066400000000000000000001002741256530234200207210ustar00rootroot00000000000000@@ (@6  (^@ ( P(@ $$Ɵp#Ý!™############################################!™#ƞ$Ɵp$ "Û"Ɵ&Ϧ%ͤ$ǟ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ǟ%ͤ&Ϧ"Ɵ"Û !&#Ɯ&ҧ$ǟ##################################################$ǟ&ҧ#Ɯ!&"%"Ĝ&Ц###################################""""###############&Ц"Ĝ"%.Т !&Ц################################"!############&Ц!.Т "&Ҩ###############################!4Ƣ^ѵjջ>ɧ ###########&Ҩ"#™$ǟ##############################Xвkջ!##########$ǟ#™$™q&ϥ#############################">ɧOή!#########&ϥ$™q!%Τ############################"fԹ| ########%Τ!!™$ǟ############################nּ"#######$ǟ##$ƞ##########################$]ѵq׾#######$ƞ##$ƞ##########################3šNͮ#H̫>ȧ######$ƞ##$ƞ#########################"dӸ "##" oּ"#####$ƞ##$ƞ#########################G˪Qί!########!mּOί#####$ƞ##$ƞ#########################x###########"#####$ƞ##$ƞ########################)Ý ############3Ƣ,Þ####$ƞ##$ƞ########################Tϱnּ$#############Vϱ####$ƞ##$ƞ########################6ƣ##############\Ѵ####$ƞ##$ƞ########################!##############2ơ"###$ƞ##$ƞ#######################""############## #"###$ƞ##$ƞ#######################!"##############"!###$ƞ##$ƞ#######################!"###############!###$ƞ##$ƞ#######################"!###############!###$ƞ##$ƞ########################7ƣ###############!###$ƞ##$ƞ########################unּ$##############!###$ƞ##$ƞ########################Dʩ ##############!###$ƞ##$ƞ########################!y############ !###$ƞ##$ƞ#########################iպUϱ ########!$2š!###$ƞ##$ƞ######################### r׾ #" Pίx!###$ƞ##$ƞ##########################I̫hԹ4Ƣ $:ȥn׽v!###$ƞ##$ƞ###########################r׾uؿ!###$ƞ##$ƞ#"›"›########################!uؿ!###$ƞ##$ƞ"š'" Ĝ########################!lֻ{!###$ƞ##$ƞƜA^v(ǝ########################"AʨLͭ !###$ƞ##$ƞ"š#Mi~q7Ȟ"›######"#"###############WϲhԺ%›!###$ƞ##$ƞ#"›Ȟ:i}pL ĜŜ"ÝšƣŢšššŢƣŢÞ!›###########!/ĠTϱr׾}nּPί0Š#!###$ƞ##$ƞ###Ǟ)\xav+Ɯ.G{]ipY{OzP{OuTdbOt6!œƣğ"##########""###!###$ƞ##$ƞ#### ĜƝGets_!{vvvvvvvy6j]9šĠ#######################!###$ƞ##$ƞ#####"šʣk`h?pIy |{{{{{{zywv}E;Ǥ œ#####################!###$ƞ##$ƞ######ƣTpxu;qXv8{|{{{{{{{{zu}faÞĠ####################!###$ƞ##$ƞ######Þ4zy$rOrPy(|{{{{{{{{{yv?-Ţ###################!###$ƞ##$ƞ######"›Þ:w||v6qWtC{|{{{{{{{{{v*=ƣ##################!###$ƞ##$ƞ#######ƣj^v{{|ztDqVv8{|{{{{{{{{w~HzǤ#################!###$ƞ##$ƞ#######Ġ=|z{{{|y&rKrSw2||{{{{{{{w}H{Ƥ################!###$ƞ##$ƞ#######"›Ý:w{{{{||x-rOrQw/||{{{{{{w=Ţ$##############!###$ƞ##$ƞ########ƣZlv{{{{{{||w/rQrNy'|{{{{{{w*-ğ##############!###$ƞ##$ƞ########(+x{{{{{{{|{v5qVtC{|{{{{{u@Ğ œ#############!###$ƞ##$ƞ#########ƣbdv{{{{{{{{{|{tBqUw0|{{{{{vdcƤ#############!###$ƞ##$ƞ######### &/w{{{{{{{{{{|y(rPtE{|{{{y~7Ġ############",Ğ1š1š1š1š-ğ#####$ƞ##$ƞ##########ƣIyyy{{{{{{{{{{|{u?qQy&|{{{vFš"#################$ƞ##$ƞ##########"ƣqXu{{{{{{{{{{{{|x,rRw2|{{zzD}š#######################$ƞ##$ƞ########### œÝHuz{{{{{{{{{{{|zsJv;|{{vCŠ"######################$ƞ##$ƞ############Þ œJvw{{{{{{{{{{{{|tBu>|{z|;Ġ######################$ƞ##$ƞ#############ÞÞUo3xvxz{{{{{{{{{|u;tA{{vm[Ƥ######################$ƞ#!™$ǟ##############!›ƣ"MvJ,|xwvxy{{{{{|v5v8{x5"œ!›#####################$ǟ#!%Τ################!œŢŢ(:Psi^K5 xvxz{{|w4w3z}9ğ#####################%Τ!$™q&ϥ################### ğŢƤƣ#2Rr{O,yvy{|v5x(xUoŢ#####################&ϥ$™q#™$ǟ#######################!œÞƣţ&Kx~L$vwzv3vl[ƣ####################$ǟ#™"&Ҩ########################### œŢƣ.`f3yvq{OǤ####################&Ҩ".Т !&Ц#############################ÞƤ"NvɦaҶtؿ$ƞ###ǟ Ĝ###########[ѳtؿ$ƞ#!-7Ɲ"›##""›"####!oֽ\Ѵtؿ$ƞ#"%ŝDE#šȣƣÞÝĠƤƣ ##"0ŠxZгhԹtؿ$ƞ###ǞƝ7IZnB75;|NTp'Ƥ"›#$iպtؿ$ƞ##$ƞ#ɢF~m+q)wxwuv&]hŢÞ$###""##iպtؿ$ƞ##$ƞ# +!v(u=y)|{{xuE#Ġ$######iպtؿ$ƞ##$ƞ##ƣFv {v5v:y$|{{t 5&ğ######iպtؿ$ƞ##$ƞ##ƣOuv{|z"v8v7z |{t ;Þ #####kֻv$ƞ##$ƞ##!œ Ý1w{{|y%u;w0{{t sVǤ#####dԸoֽ$ƞ##$ƞ###ƣMvvz{{{{w.v9zzyBŢ####"(œ1š1š(Ü"$ƞ##$ƞ####ƣsUs y{{{|z!v8y$v =š"####!!#$ƞ##$ƞ####!œĠl[}uuwy{{w3y#z>Ġ#########$ƞ#!$Ƞ#####!›Ƥ0^h~L8%xu xx-tnZǤ#########$Ƞ!#&Ө#######ÞƤƤğ*E}sV)voAš"########&Ө#!š&$Ĝ%ˢ#########" ÝŢǥ$Rq5<Ý"#######%ˢ$Ĝ!š&!L#ȟ&Ө$Ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ!Ǡ˨ ȡ8$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$Ƞ&Ө#ȟ!L("Ǟ"ŝ#############!ĝ#######"ŝ"Ǟ((0 ##ǟ"ƞ########## !##"ƞ#ǟ#$$ę##Ĝ&ԩ$ǟ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ$ƞ%ƞě$ƞ2ʤ/ɣĚ—#ŝ%ǟ&ԩ$ĝ$ę#"'ԩ########$2šlֻ#&ԩ"!$ǟ#######$@ɨ!$ǟ!#$ƞ#######"Kͬ'œ.ğy$ƞ##$ƞ#######r׾"#!Ŝ##$ƞ#######|$##,ĞLͭÙ##$ƞ######!Xв###"cӸ—##$ƞ######"hԹ###"eӸ—##$ƞ####### ##dӸ—##$ƞ#######F˪F˪MͭdӸ—##"ȟ!Û#######dӸ—#!8.ƝĠƣƤŢÞ#"o׽cӷdӸ—#"*A5?Wm[jMv1ƣĠ#'œTϱhԺVϱ.ŠdӸ—##"ȟǢ]nq*uw w}E3Ƥ#dӸ—##$ƞŢE|wv3x-{zu ~Kxǥ####"dӸ—##$ƞ!œ!œ,xy(v4x*{xyLwƤ$##"fӹ—##$ƞ#ǥdbt |{x+w4z#x}6Š##"_Ҷ—##$ƞ# #.u{|{w1x+u =š"##"-ğ1š'œ#ƞ##$ƞ#$š8(t vxzx(w+xG{š###!$ƞ#!$ǟ##$š)cdC0}v uq}MƤ######$ǟ!"'ԩ###$ÝƤƣ!œ3Yl;u3Ý"›#####'ԩ"%Ý"#ŝ&ԩ$ǟ$ƞ$ƞ$ƞ$ƞ$ƞ"ǟɣ̨ʦDfg%Ɲ#ǟ$ƞ$ƞ$ƞ$ǟ&ԩ$Ĝ%Ý"##ǟ"ƞ########"ŠƠ#####"ƞ#ǟ#$dotclear-2.8.0+dfsg/admin/images/favicon96-login.png000066400000000000000000000024151256530234200222160ustar00rootroot00000000000000PNG  IHDR``F PLTE#{bo|xIZzȠ1?gnx֒-@3vv$LypSNyh=u]p5܃WpHs-wg\WoF=,MrRq(x#y_f6N(jssmxmtcBt38}S.8uw]>9CHP} tRNSPpDIDATx^Śv8FUlǃN޻{zv(-NH "H8{`@A!y@ xV.mKg}2g>xS| G<^#%nCؼTw 3ִIt.OMIr4k}j6!ww}e28B ,)2-~JY8rAOmɎђ:`@}HE ρpmcqH =/lmOc ac @ҩ kJ4{5AmK H5w?Dwn· G']>"Ge"1T5a/ye[Plʃk*DZ>{8Npآ ٣b@pFd7AIދ7F$9$⤂h,D&XGZU`[`^9?ʸʂz|ƃꂇ`A jʹ8o<. 7WQZopAk*x}: ʂdó/_ i̗ *?3,iK|aYWHMJ$TEVA i ḙ(9Exs6W6ۇg/A;) lha~fI wX!MI`OGZJ gQIЗwQ&'mkpO*cv`( ' Fi&@"ȕ|Ӵ_7*ϖfB)$/<({ lֱo! lHeg֧]]JcT=5yb \Y4"pP!bhP xLhQ#K3*f{[M_<,qof~]N¸ֹk ҀRQ7_=yFeCtO IENDB`dotclear-2.8.0+dfsg/admin/images/favicon96-logout.png000066400000000000000000000023231256530234200224150ustar00rootroot00000000000000PNG  IHDR``F PLTE{{{{{{{{{\##'A'ݸXo6jSˮG@KUth7tb*Da~UJ.8ሶyQ5nN1~_-Zo!,C1<69bezIZAIQxrR)Ǽ| tRNSPpZ`WIDATx^8`f-3ihS3tњd-lWY*jpRi֠ԚKʗC\ۿsU!R VꛓqV'80SW)_}5BO}+yy8ED@r9{^Gzt׈t( ȘO|CDȐRRߚL[DdJ5^*2BN:3 9 9An: 31@8;g|@ lE) /jL@0skO)_ {m_6E)g R|>a>hQ@Nj >-Pn^טEy@olFx ?g* 磳 :|0a`:#N F ,X,ZX"88"Rm* Шގ O(9| ̹0p%Hr%KvfȒ lNfQl@PdjBd gQOŹ(6nzZ!0}"=آ,fY,Xt BN>'E%* Plg[;=8f8/@B>i̗=FAahZb m1Yb.jBo#Qr>ԕauJ-`< &䏽 〳&}͛ky^>KɕO %ח_O<#ZpP1d̀&׀qiT)BI\|tgĠr 5"$ Pz? Sit i¤j0ht@@P#x$ՏA) U24򌸮JXIENDB`dotclear-2.8.0+dfsg/admin/images/logout.png000066400000000000000000000012251256530234200206130ustar00rootroot00000000000000PNG  IHDRh6\IDATx%_HT[ƿ" ϐr!2)P*!AQ 0⛽JKbB Yk1cd?\fsޭ~߁3Wqd˂>e {>TWӛ?w hЊ C -D1p`qv[8k &2N?FO^|D'chΕBz^I̝Y&Hb?:Lڲ2D׃@OzTtfyy hGe3ŅŲGuN'|f;_$ɉB.;ǎ 8mX#jj<յ89A"4@n>:54B^lϦR@$o[{͎w[٥{w  PqA:RQؖ;DdyEnnLzJ i9eTqG% "qB[cXp OQG69RqM@ @,Q7. 3RIENDB`dotclear-2.8.0+dfsg/admin/images/media/000077500000000000000000000000001256530234200176535ustar00rootroot00000000000000dotclear-2.8.0+dfsg/admin/images/media/audio.png000066400000000000000000000005611256530234200214640ustar00rootroot00000000000000PNG  IHDR00` BPLTEMXzڐ屶⦬cmXbբnwօޛjtRNSPُIDATx `.`Ez3? UݠIN2ЫIƼّimRApk@ m n8S Q,~.#ԁ!% 8 l% 3Xπ}u6cgA6-/e # >6S>IENDB`dotclear-2.8.0+dfsg/admin/images/media/blank.png000066400000000000000000000002371256530234200214520ustar00rootroot00000000000000PNG  IHDR00,PLTEDtRNSPl7IDATxc`T6DCL- 8P" V8"w!㈣Xa5NIENDB`dotclear-2.8.0+dfsg/admin/images/media/document.png000066400000000000000000000003601256530234200221760ustar00rootroot00000000000000PNG  IHDR00,0PLTE3ϿYfیGtRNSPljIDATxc`T6DCL- 8P" 0KTr8@DBV]vܳ;ts q]tG%pEBGlwIENDB`dotclear-2.8.0+dfsg/admin/images/media/executable.png000066400000000000000000000006241256530234200225040ustar00rootroot00000000000000PNG  IHDR00` BPLTE"謬K0܃ֿugY>RtRNSPُIDATx^n0 ;ʺVTD}|9qQпh6aF O]m/;go󉒣YY AKeLKZ[!( !Qn,D`.Y ih5 U(B(cQv.IU0lYm!ypw"jZ}5Z$f φ Ah $״B]#KaolF>ǟ/CT4IENDB`dotclear-2.8.0+dfsg/admin/images/media/folder-up.png000066400000000000000000000004561256530234200222630ustar00rootroot00000000000000PNG  IHDR00WIDATx1J1A9‚#f. {a;,f(/ɰo)M7 ؊ i>`{@mT]=@#t 2POy :1 `PȀ h'i~[ ma_&Ra8Q` *̠ Jx7kogQ 89Ȁ h `_. e֣ϥIENDB`dotclear-2.8.0+dfsg/admin/images/media/folder.png000066400000000000000000000003021256530234200216270ustar00rootroot00000000000000PNG  IHDR00WIDATxQ 1 EJ``_BI*0pnrg_UT]ٲ ꀦ*(2` `Ap:{<{*! pQDT>8Q* 7 IENDB`dotclear-2.8.0+dfsg/admin/images/media/html.png000066400000000000000000000010021256530234200213160ustar00rootroot00000000000000PNG  IHDR00` BPLTE3@ҙMf۳Ysަ/tRNSPُkIDATx^r Pgr{a]_ v%S }}> <(x.X[y,{๼nƀ\?BW `bX_+IWJyU"$_lS$7PQttɍbٰ{ҎZ8Y#<تC`Ag <@IvcM L@ RN VaV;pMBp# s2Ĭ2 1pz7FANFf@yoJ`qUl_Ae L@lA] zT*zh?x5b!vW.ot3/'7?f.4IENDB`dotclear-2.8.0+dfsg/admin/images/media/image.png000066400000000000000000000005561256530234200214510ustar00rootroot00000000000000PNG  IHDR00` `PLTEMX⦬XXbnwb屶ڐwzmx5!tRNSPُIDATx^٪! @Չ:}mhCœs(HFBȒ(Q2&p<19`<7 u;*h7Qkmq.ˈLkQ< P}DL8 uP'9.p:HX"|0K|k:𗓂ݓ jwIENDB`dotclear-2.8.0+dfsg/admin/images/media/package.png000066400000000000000000000003671256530234200217620ustar00rootroot00000000000000PNG  IHDR00,0PLTE?{Nz1ØqtRNSPlqIDATxc`T6DCL- 8P" a P!پ wbJth%bVZ wժ5H/:S ,1*E+B"~&?4]8(OhIENDB`dotclear-2.8.0+dfsg/admin/images/media/presentation.png000066400000000000000000000006671256530234200231050ustar00rootroot00000000000000PNG  IHDR00` iPLTEMXXbWXY⦬օbbc屶ˡnwڐޛcmwwx̪tRNSPُIDATx^׮0 p6{vYRGb' !DB6,ID4LM@nKk@mesgŗd@g 08d` )mFs4\!hU@{ g:` , v| mFfm <{/}Pzl|o@-a{/PN_ҕ sr 5z:"c%145 #)@RTAh!j1nIlvP?:PEߗ2|{) |@X`AX` EW0ٯ쯃90GLIENDB`dotclear-2.8.0+dfsg/admin/images/media/video.png000066400000000000000000000004521256530234200214700ustar00rootroot00000000000000PNG  IHDR00` 6PLTEWXY֫lmnwwxbbcvItRNSPُIDATx^! E}3 پ VWдMx6.^ af#Lޢ95>2b5jeҨe֙sƈu{sA9|.֩/]#$_h#[_8EX_h.j^-x:zw,,ژZ1ei |~C`_ wԓx>K1a d>;bz  >pG$և:YPPPPЧ!Y/D >}/h  ȏ?o8QaGGAC\P`1Q;bk` 4DB>DՏ:Y PPPPP> ,}YxkiIENDB`dotclear-2.8.0+dfsg/admin/images/menu/blogs-b.png000066400000000000000000000003131256530234200215700ustar00rootroot00000000000000PNG  IHDR@@PLTEgnxgnxgnxgnx#MX{ȁtRNSPlZIDATx׹ @ (?Wl.=w [3pnQ5TJR|Jh\{ٝ,]};R@JIENDB`dotclear-2.8.0+dfsg/admin/images/menu/blogs.png000066400000000000000000000002161256530234200213530ustar00rootroot00000000000000PNG  IHDRaUIDAT8cHϫxj d"yry DY608p < 8 jE~"'vJDIENDB`dotclear-2.8.0+dfsg/admin/images/menu/categories-b.png000066400000000000000000000007001256530234200226070ustar00rootroot00000000000000PNG  IHDR@@PLTE쪭gnxȀ噝ov#I׈MXWa0nak؝߭຾ܡ<ݰ֓ӉbắUu}kt tRNS@` pPjuIDATxk a2LwS,kmy;M!G` WUgT[4eҶ)==֟ qb J\ tPP|%]ejQlȤ |rM{WAg2o=FeXtdcj&pz^Ā7oސG T w &r0H/TYIENDB`dotclear-2.8.0+dfsg/admin/images/menu/comments-b.png000066400000000000000000000014641256530234200223170ustar00rootroot00000000000000PNG  IHDR@@iPLTEgnxgnx{gnxgnxgnxgnxgnxgnxgnxgnxgnxgnxgnxgnxgnx{{gnx{{{{{{{{{{{{{{gnxm!tRNS @`ϯP0p0pϿ `P@aYIDATx^[ A VJփG!2[ξI>)- @0dEH # QȒLR‚ SIyۧseH R/3)Ers0xbꁔ}>>2  rd$48&:,C$t8Q9~m~ IENDB`dotclear-2.8.0+dfsg/admin/images/menu/edit-b.png000066400000000000000000000007251256530234200214160ustar00rootroot00000000000000PNG  IHDR@@iqIDATxۿm0q@ dL-R G6=G )t3 Y*~z@ jeQPɨRQF|>BE} @&f%x` ¬X!'.{QA{jCG8ۄPA͸&:,BDT4Bb Po1FVX~< PP  "<  "< @ aHBlt987 ԑc RB @<*qQuxclpp8EtرGdpJhAmt 6@~ M5*0 /LLC +3?옣IENDB`dotclear-2.8.0+dfsg/admin/images/menu/edit.png000066400000000000000000000003241256530234200211720ustar00rootroot00000000000000PNG  IHDRaIDATxϱ 1 @ь`E)3u7!uBHg%H]:fWa%0̐Gjgiwy ӆ lnDjkDHو ~"-rw#? @N(:7gJ0{IENDB`dotclear-2.8.0+dfsg/admin/images/menu/entries-b.png000066400000000000000000000004211256530234200221330ustar00rootroot00000000000000PNG  IHDR@@!PLTEgnxgnxgnxgnxMXMXMX{{{Н j tRNSPIDATxI DQiVWAQaaoL y l /gO VX,?<?`<`wvk p {` Z Oz௠=ho̳?nhF;2IENDB`dotclear-2.8.0+dfsg/admin/images/menu/entries.png000066400000000000000000000002071256530234200217160ustar00rootroot00000000000000PNG  IHDRaNIDAT8c`@y?=:I0 P"La  4b ջ?,0zDu8^IENDB`dotclear-2.8.0+dfsg/admin/images/menu/help-b.png000066400000000000000000000024341256530234200214200ustar00rootroot00000000000000PNG  IHDR@@PLTEgnxgnxgnxgnxgnxgnxgnxgnxgnxgnxgnxgnxgnxgnxgnx屶ڐMXzXb⦬˼nwcmօޛgnx޹^kǽ tRNS@ pϟP0`0ϟ@P pU8|IDATx^r:%!L$3guIft,iمss(-=hG&A V ='Z048 lٮAk[HzƊ*kYC\a?մ3qmp'yzUyY(ujE3{+" ^Q]C:d鏡-}T`wp/~$tY  F@?ʖI M.8).~;P7+歓JDRL҅uJh(;@ UZʌf[рPf\N/vDLe-I~f >I>rDOY/g)R ) 0t&A/џ&@K塄dԪɒfN$S؂mwJd?5WqJp>?[@о1}^ amip'@8_a# р̃7o!LIB?4B치.؛xs x| 3l8Q`Z?P& >,X_\9o^ '1`ID.j~A?֒Xk~/-cǑm$|P5||EDp+'ӿ$0qi 6B7@Gϓq# f݀ߞhCzAY ßOmx*iG<^44VTn)9DC~V֍KY'f w 3j+B-[/r :RCX;7]Pj0`t8F5~cnIBX*7桿mG&7Vmo mǺ sRGCmv>84ygt֫C~AjE? ߨ~+ƼIENDB`dotclear-2.8.0+dfsg/admin/images/menu/help.png000066400000000000000000000004651256530234200212030ustar00rootroot00000000000000PNG  IHDR(-SWPLTEgnxãgnxÝt}^h˼ǯMXڐօޛwZdeo\fXbnwluQ\;tRNS@@`q~IDATx^mW0 C%頼aA%hP$5Yci>B1eAsJzw笅ӂ= n&evh[0tyiݐ{QDޖ0Ǝ!(v JIENDB`dotclear-2.8.0+dfsg/admin/images/menu/langs-b.png000066400000000000000000000007521256530234200215750ustar00rootroot00000000000000PNG  IHDR@@iqIDATxڱ @#@$)E)}F`)=#0gɉүh>%^^~1D(DTg Q-@{R-la_GMFmɡ/1ZG 閇v]_vAa# Rf= Ua;6^-=E"ڕ}%E `BK"DcB/aolEnc97 0KNe`FjaYc;@+p슐+pA !G5ŽMr7+14tqAȠ0t꿍8o=x>4(((((((@ ?)_vˠIENDB`dotclear-2.8.0+dfsg/admin/images/menu/langs.png000066400000000000000000000003021256530234200213450ustar00rootroot00000000000000PNG  IHDRaIDATx̡ AW”p \ yGN"󘭅%\ [u g&y< tFdTl01"`p Q1 G  *Q`{"cGW\;ZIENDB`dotclear-2.8.0+dfsg/admin/images/menu/media-b.png000066400000000000000000000007021256530234200215430ustar00rootroot00000000000000PNG  IHDR@@iqIDATxױiA-A Nԁs'[ p ί0%@ ,i$N1#$ш\1ސ'Lȓ61~QIG  ,^bh _и LV7 ]ΏDS/dF~N`DNV foQI W#ڠXG1?Wh**UA\_& ~z5:4 !՗#WKW OQ%*1bd=p0`=薂idfT6@<j7 (55$<Y # < '% '/ǚ"؁&yXrISIENDB`dotclear-2.8.0+dfsg/admin/images/menu/plugins-b-update.png000066400000000000000000000021131256530234200234230ustar00rootroot00000000000000PNG  IHDR@@JPLTEܟͬݦդ޳ҭൠ߭ʽ›ȵwܹ˴͈ީ㷺ۜȦɸȝ~qiȔzݢ䛾ӹ㸼ɔheǂr٠ҘV\MX֧ү֌Ჭӥ˭˾ܡٞբנͺ_aٟɯھymNjvϩӻ6i1tRNSƟ欳Ɵ欿߹̹.IDATx^Wc0QaF&`FivtQ:RIfgٽlmX &48zLW"DB~x٭8mg=xb@DPP`GT)eGwP=vAxp 09 𩕔 " icI=^<xq.^~!S~HɚJ@'[-ӉY9 O/dT.L<*-@ /==2Xcۤtk۶= Qy?GŋYTW㞯TZFj@Wx'h»h@ݦM@M_*XH?ϼ} FE֧cf@7x 7i %fr<-23LZ7CfȊQΈXm)O/|hWIENDB`dotclear-2.8.0+dfsg/admin/images/menu/plugins-b.png000066400000000000000000000016351256530234200221530ustar00rootroot00000000000000PNG  IHDR@@PLTE#gnx{gnx#gnx{#{{{gnx#gnx{{###gnx{###gnxgnx{#{#gnx{gnxgnx#gnxWojtr_o~:.N{zgnxgnx#gnx##gnx{,bo|11lq~h?vjss#yWoWp3"3v6(@N-]g\z캳Z$Hs{[2tRNS``@00 @`0p@P p߿ p PhIDATx^g0uջ}ѹxo!i@!nÿՠ-=[zZi,}\|-=jx^8^I>.Ϣ37=8q"QHQت,IVjx8`.so]B.oΤIRxq1ԅjO]A9{Z &L_6R]-!c]]a s <*|o^@Q{|\xRDBRW? eOه/½iSeez"Y ltI5(q (KQRDg=p=x;$Wl"Idu]*6g@1qׯ5?N`s ]2%h; ADY "0#+sf[^;~,m|f7٤!=>LŃjϨxxw1fXAzޜ_O1/LDt "J'C'ȋL7j\dgz:aiI"9."du+1*>|\ϪYIENDB`dotclear-2.8.0+dfsg/admin/images/menu/search-b.png000066400000000000000000000010341256530234200217300ustar00rootroot00000000000000PNG  IHDR@@6PLTE{{{{{{{{{{{{{{{{{j;tRNS0@P`߀ p/ӮIDATx^ݒ `IVewUPb:W5tNoCD< OǺk!?s 0K}o?89%["+!`o1{ei&7jtM- 8m]=0xp-Me`~̀ 'Sf8 7 p(<,> c2/4N9c%$&^Y%n(K;;k#&X3`A~^~p~oXUz-rT rV(a|`%;V:R@X:blP %@+(w |IlH8sIENDB`dotclear-2.8.0+dfsg/admin/images/menu/search.png000066400000000000000000000003331256530234200215120ustar00rootroot00000000000000PNG  IHDRaIDATx B!-F(~ ؇JJnI&k4y\f >dq/U-Au5zN64WtfVD|hk0#k ޒ-ee[4,[f &ߎ85 .s_ʩ؅IENDB`dotclear-2.8.0+dfsg/admin/images/menu/themes.png000066400000000000000000000002461256530234200215350ustar00rootroot00000000000000PNG  IHDRamIDATxϱ 0 D,E)o { EAȅS~qB@zwO3R֠.d d¾-4u%@ H#@# 2é!`GIENDB`dotclear-2.8.0+dfsg/admin/images/menu/update.png000066400000000000000000000005121256530234200215260ustar00rootroot00000000000000PNG  IHDR(-SfPLTE޳ӉՒʮ؝ݶױÈhqݠڻڨoxЕMXjxеq tRNS̿Ɵҿ̹߹榟Ƭ#IxIDATx^]0)-E~D &%wًOdy_K?(NG(9KC@g< H`;$ހ*wC kJ ,3l$9l/5 IENDB`dotclear-2.8.0+dfsg/admin/images/menu/user-pref-b.png000066400000000000000000000016141256530234200223770ustar00rootroot00000000000000PNG  IHDR@@PLTE{{{{{{쏼ע{{{{{{{{{!w=ʢ%C yݒ( XzOC BVW Jt%d Gp[ef<7h'` oJ2ӈ/ Y(^Ep4h`͐(YoW %DNWvƁH YH,\3DIbQ* GMǟF 2wX#AmW<@f(APЬpCLHkjQW^҃fW 0gQFl(9@As2w_8xD,/oF =ݜW! $JdkQ*FJ v*@ 9P[ CdW2@(IO,l *(E1@@HE1Q;eg9c3E%lo0~w-9@ r@t` H? iV >GAx(w>~{Ⱦ1:$ ]}h96@=GDSÄ!;2G,=x9@stY9>`_w0 YEYxD H(o¼ ۻ,BLIENDB`dotclear-2.8.0+dfsg/admin/images/menu/users.png000066400000000000000000000004111256530234200214030ustar00rootroot00000000000000PNG  IHDRaIDATxM0a`\”(q@tRBpH [Kp È5k@LN{xPtT *JTP {u3(@37:o/6PuvWOHo]QQnЅz:44 ɇ7mQFA]‰qXw 3V6 zGw=/BgIENDB`dotclear-2.8.0+dfsg/admin/images/menu_off.png000066400000000000000000000002431256530234200210770ustar00rootroot00000000000000PNG  IHDR N(tRNS7X}XIDATxcXl um ǎ&MS<h۶M߿åz;_BW)ھm; 8~ *04Z(9IENDB`dotclear-2.8.0+dfsg/admin/images/menu_on.png000066400000000000000000000002561256530234200207450ustar00rootroot00000000000000PNG  IHDR ,uIDATc`/E 5 0W%q*Ɂ0 7zT0pۼ C1H~J?+_1 l0 a q7$N1SD2MIENDB`dotclear-2.8.0+dfsg/admin/images/minus-theme.png000066400000000000000000000003311256530234200215320ustar00rootroot00000000000000PNG  IHDR6 IDATxcM o7lb 6͇{d)Q4 fbD D@p>N# pD~ `1buXTc1dCؐXUB+0!fPC] @ĔB1ò2#]>35ҩ#%<IENDB`dotclear-2.8.0+dfsg/admin/images/module.png000066400000000000000000000004231256530234200205660ustar00rootroot00000000000000PNG  IHDRaIDATxڥ1 P =G(=\D :ENECuhi=s}k={^B%o̗[LD9FLղg{ٰ {QsH+NX5jUuږjh :!Aj}$XvLa'4!!Ȍ&P_r-GRDexh>ٮIENDB`dotclear-2.8.0+dfsg/admin/images/noscreenshot.png000066400000000000000000000022241256530234200220140ustar00rootroot00000000000000PNG  IHDRH[IDATxЁ_`B(#F1bĈ#FĈ#F1bĈ1bĈ#F1b#F1bĈ#F bĈ#F1bĈ1bĈ#F1b#FطTs3%cbk;dw:YSr95#|.*`~ n==gb=QXRm9ڃ67 D<M2T*Y}jpLylu ]];` ̥@7~ Ltpfi15m]! j~1w0:3/*t fj S\!?2TڥS0Oʠ-Wka=!_Д݂J<_)NjqN$MS(M븬)v.$ 7uR6^J 5eC;^@ X`. > L2ʦ,02׶yg]s0#d19 )Lta(ẕ)gʆf*0c ̈́[aoqU \4~(|0L|Z ]I,4,X'NշT֍,aGE enTm.앧 WlMM߄fGaw.6q>)NK`LyrM&ҭ} (0?]Zxw h gj\3.J`pE =pQS>rQS-Z!"AyW΅./WD`ەl^6&0d$0#0#0#0p8osWrG>vt׬osmK>[_a, }4e=ʤZu`(k9"eB\RQr,0EԔfed944e{*ʤ l*Hw]1$Sw.j[ }way/ZhUX`>~zi1r>_;t,0z; !1b f#F1#F1bĈ#1bĈ#F1bĈA1bĈ#F1#F1bĈ#1bĈ#F1b F1bĈ#FNh KIENDB`dotclear-2.8.0+dfsg/admin/images/outgoing-blue.png000066400000000000000000000001501256530234200220560ustar00rootroot00000000000000PNG  IHDR 2Ͻ/IDATc)M!H T2`Ua .T3)$S# IENDB`dotclear-2.8.0+dfsg/admin/images/outgoing.png000066400000000000000000000001501256530234200211310ustar00rootroot00000000000000PNG  IHDR 2Ͻ/IDATcb6 1dS!bLDWU!)P "6|IENDB`dotclear-2.8.0+dfsg/admin/images/page_help.png000066400000000000000000000013221256530234200212240ustar00rootroot00000000000000PNG  IHDRaIDATxڥSMOSA%wPb b&FMHPX lcJi UA H?}+sޱIrsϙsgRGG}}v:-7&:Lm1Ŕ݆hc-)8>`(&!3Vg2ڿws^8 ߗ!iPE&gL5"YUZojg0`3IN ey Ϫq:s_iDJjkdKI$jXM 2--=pdc'd;ʻUUa4=]W?d6(\(ӘqVF/-/Gp/]j2&^77PUޕ n)"Etz:E5Ur=DꊢbQW؈^EIш._!4YN`3fApu9bDc"G H$k>f8%V**77˜Oz>[zPñJ m;U7h\c#TIn1$,fpf4x1X~k^?##W^FJGdsyu|4ᇌ֨&791X IENDB`dotclear-2.8.0+dfsg/admin/images/pagination/000077500000000000000000000000001256530234200207255ustar00rootroot00000000000000dotclear-2.8.0+dfsg/admin/images/pagination/first.png000066400000000000000000000002071256530234200225610ustar00rootroot00000000000000PNG  IHDR v 9NIDAT(c` <2C; iV@R 2HC}?T}fҜ|k2(Uh$l6IENDB`dotclear-2.8.0+dfsg/admin/images/pagination/last.png000066400000000000000000000002041256530234200223720ustar00rootroot00000000000000PNG  IHDR v 9KIDAT(c`T <22C 5d?T} iD2DPlrO+m5zO{@J4 $lefhIENDB`dotclear-2.8.0+dfsg/admin/images/pagination/next.png000066400000000000000000000001641256530234200224120ustar00rootroot00000000000000PNG  IHDR v 9;IDAT(c` <22Cq1@d~r]Q@( DD#zO7d*IENDB`dotclear-2.8.0+dfsg/admin/images/pagination/no-first.png000066400000000000000000000002031256530234200231670ustar00rootroot00000000000000PNG  IHDR ŲJIDATxc&԰?lr @P$ T$>E( J AWvJ@a $;7 @p#qmIENDB`dotclear-2.8.0+dfsg/admin/images/pagination/no-last.png000066400000000000000000000002011256530234200230010ustar00rootroot00000000000000PNG  IHDR ŲHIDATxcؔ?:l2 `I( R>ޏL'T@ כ 52IENDB`dotclear-2.8.0+dfsg/admin/images/pagination/no-next.png000066400000000000000000000001631256530234200230230ustar00rootroot00000000000000PNG  IHDR Ų:IDATxc&ؔ?lb@ (@7)VT $aMEwTIENDB`dotclear-2.8.0+dfsg/admin/images/pagination/no-previous.png000066400000000000000000000001651256530234200237230ustar00rootroot00000000000000PNG  IHDR ŲIREutV Xڀ  S?nA (p 6@R Ht֡b8{j1 NT9lwkSƋߠMӨS^ͺװc˞M-vX!EcFE,di@9zWB !ǝ(( E 6F(7Axdv0i=a(,ߌ4h8h `Ǐ@)D)d L6PF)5f\B )dJ  lF -)tR9|&IF*蠄VS&袌N\F*^df Il*f t'vI|*3:I@r+Mj&lr)F+J~h*', k.r+[KJi".o2\*igKé& n6k[#`q?2$*_rB…0ك*P3hWFwak.;@hGۦ~jh ]a'7"4H46W  TV(DVl:i!t `=b 8G_f pR ta%c(Q *b) qb-9_|Bw$.(QEp>{c`Zc X,ED"@d|H@ 嗿~fA"(R ( g݅1 c.z` H2hL6;@Z+OZ< jWPtk':A^mFk6Q6& կbn"hA7qЄ"thCQNL"2яqhBꉑte&JSz.L;!ә)NSHA j"(**l%brb( #*)ƒ*V<0HlCZ[ omMN P8Ե5YBݰDC`[P4}lgKͭnwmU@P6d)) d R " pfl `R x !q XDPn,{@@8C  FD0xa ރ C?\%FU.tCXƂrX -E[Rą\ p۔MID[A0-HQ| Y ) (V!KU֛ !"1 9LC,? r!rғ^*g$#G,gp3d2(Fx, *~044 AG ? rDԌ?8}bZ hc.@Hs8HxB+,]J0f9⵽H_#,4U]e(W.zη~NO¹݂(VYkmVF b `Yla yA826,hͅ*@m@  0<?-,nV gkRKթ:UҐA~Ūisvrx '0_hSD᣿,sb֗9gpy. W~z0z. ~z J,Ͳ B-JG0۲ 4 #.`K0 Ԁ/L1R1 ȁ⁚!-# %h߂+h.-x /"@5H/79/ >0 CX0 H0PM0 RH1 W1\2}_H& 7l} gH' |r~oH(O 8x) bЇb{0* ap|P+ T|, Ep` G c C!_ F`h"\ HP #d DP$W0xad NSi Un \s csx jӍ} q3 Vz?X!eX{BYeY0|@PZ7m8^|A[/M9b1@0K9a PQq.I9T𑰱1N0$pVyXZ\ٕ^`b9dYfyhF  ,`XCbd\jf[V DSfc6Pn?&Bsdl6S@]@op dgm $ pl va 0mre` `eנB ke1*? Xa&fb0u){k9 ǰ&`3@ L P~iIkohC-__oBo9@ k6QE0jz9j Dv.dFaZA &vjT1WD?Y4CCDCO e Vb~{zXg$i kY=)eD`Pl@ `\>!*`?J)Pc?QEաze/1  \>m Tf@TC4 {p@dUjva(Z LZMoUWjvF:l@izargP)w#;t@3i=h!Jr@ Km`?q ߖ @JF fb15tC0A> 6VʝjaJjdj@TVkp|QJgF nÐgc!F: _q^՚ȵ 2a>SIj;]Jz gЯ2 a,qT s@_Xy1P$XKU2 `hv kge;Ci t>JDمw!1A` m;[{۹;[{ۺ;Wlp["?+<.9&7c oPkBB93<9'9\n0zb@Gz J9(10dqRApU &4)ٻђP4y57^BY6ElÔP97S9PkS2!g T7fpT4@eT9hU6i`U10AjU5``u =hV*п l G(Wpx QW$`Fsΰ_؎c0gXpkΰo؏sU(VPVňVʰVVWHWpWרWWX0XhXzxl@ WĀ{ˈo@ u |רn@ ׍v ŠU$qP E ,J |O (T 4Y lA^ Nb  2 k2 #2 +*r02 ܋5<2 CbU KP2V<̚ɬ l̚լ -͚p| }Ά%M ma&K p0q('I rҁ2(NtYtL<&F itpMF'P ݴyИ0NP(Z TՉu0ZM _!d! i"pnm#sM$x%P}% "bq& rrr'.gP-(5 $Pيs1m #"2 " /-ŠP3# ;Fb4=%xBە G ܝ L\ܥ Qܭ Vܵ [Lݽ VN}; -PE u:L -v@P$]!g Xb "e 60>$i PP> ɴ G0L0(!մ F*M2n#ᔂ7>$ DPNF rP"]4Y$Nݟ Te \Th!Tkn"Tn ,߸UtˍޝӠPӠ=ԠԠpKR lW|AΠP}#>Ϡ}(Ϡ}-Ϡ@~2^Р~7כ~<Ѭݮ ܲ ^ܶ ܺ ܾ N Ğ.љ  ѝ@ 'Pҝ* &Қ@=4Z ]p#(M`-İ2@`vİvw(PwhĠww戇f$& l<* p. t܄2 x,6 ||: % `!nV!\lu¥.W-\( x5åݼw9l$ã ?J ?Lp(?M!Ќ,M'00M4_N&8N#PP" ->쭱"@-=P `P.A  E`k`7"_G g8"lCf@b9(lFe*":.lHh 6:4l Qi&v{D^j#t. ԁ;dotclear-2.8.0+dfsg/admin/images/picker.png000066400000000000000000000003341256530234200205570ustar00rootroot00000000000000PNG  IHDR IDATxuϱ 0 J2$8J&N<@ F`W[ڹa,/@fd?teEQC9\S]D`9OG8 @<ͼP12L Ӎ ` bx<f'֍0 q0@ if?ny&HE'D&$`xH 7{Oy$Njx XIqò4 &[,ϻIENDB`dotclear-2.8.0+dfsg/admin/images/plus.png000066400000000000000000000002261256530234200202650ustar00rootroot00000000000000PNG  IHDRH-]IDATxc-?1V4M $;c\85B`Ԙ#1 4"RѰ9g @jbNIENDB`dotclear-2.8.0+dfsg/admin/images/scheduled.png000066400000000000000000000003041256530234200212370ustar00rootroot00000000000000PNG  IHDR Vu\IDATxڕ ).|i(J}1&\2!7ֶ.2 }l`@'Wxfְ67O` C8DH *(TБ(&?ZZUJnIENDB`dotclear-2.8.0+dfsg/admin/images/selected.png000066400000000000000000000002621256530234200210720ustar00rootroot00000000000000PNG  IHDR Vu\yIDAT(c`bAXT<IU r(Ǧ ~$ A<"\Ff ?ԣqIENDB`dotclear-2.8.0+dfsg/admin/images/superadmin.png000066400000000000000000000004011256530234200214440ustar00rootroot00000000000000PNG  IHDR aIDAT(cXP~b1â/"0XĢ);0 wb)F1M?,`TD qmCߜkWA y:eqǦA u`i@Q{)=99b8\$q?#D q GrSXH*Y)IENDB`dotclear-2.8.0+dfsg/admin/images/trackbacks.png000066400000000000000000000003141256530234200214100ustar00rootroot00000000000000PNG  IHDR/\IDAT8c` =Rq܏ !d ޏnH?@lL|]ՠx@A 0Fx"{A%` phV6' setUserDefaultBlog($core->auth->userID(),$core->blog->id); $core->adminurl->redirect("admin.home"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } dcPage::check('usage,contentadmin'); if ($core->plugins->disableDepModules($core->adminurl->get('admin.home',array()))) { exit; } # Logout if (!empty($_GET['logout'])) { $core->session->destroy(); if (isset($_COOKIE['dc_admin'])) { unset($_COOKIE['dc_admin']); setcookie('dc_admin',false,-600,'','',DC_ADMIN_SSL); } $core->adminurl->redirect("admin.auth"); exit; } # Plugin install $plugins_install = $core->plugins->installModules(); # Check dashboard module prefs $ws = $core->auth->user_prefs->addWorkspace('dashboard'); if (!$core->auth->user_prefs->dashboard->prefExists('doclinks')) { if (!$core->auth->user_prefs->dashboard->prefExists('doclinks',true)) { $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean','',null,true); } $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean'); } if (!$core->auth->user_prefs->dashboard->prefExists('dcnews')) { if (!$core->auth->user_prefs->dashboard->prefExists('dcnews',true)) { $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true); } $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean'); } if (!$core->auth->user_prefs->dashboard->prefExists('quickentry')) { if (!$core->auth->user_prefs->dashboard->prefExists('quickentry',true)) { $core->auth->user_prefs->dashboard->put('quickentry',false,'boolean','',null,true); } $core->auth->user_prefs->dashboard->put('quickentry',false,'boolean'); } // Handle folded/unfolded sections in admin from user preferences $ws = $core->auth->user_prefs->addWorkspace('toggles'); if (!$core->auth->user_prefs->toggles->prefExists('unfolded_sections')) { $core->auth->user_prefs->toggles->put('unfolded_sections','','string','Folded sections in admin',null,true); } # Dashboard icons $__dashboard_icons = new ArrayObject(); $favs = $core->favs->getUserFavorites(); $core->favs->appendDashboardIcons($__dashboard_icons); # Check plugins and themes update from repository function dc_check_store_update($mod, $url, $img, $icon) { $repo = new dcStore($mod, $url); $upd = $repo->get(true); if (!empty($upd)) { $icon[0] .= '
    '.sprintf(__('An update is available', '%s updates are available.', count($upd)),count($upd)); $icon[1] .= '#update'; $icon[2] = 'images/menu/'.$img.'-b-update.png'; } } if (isset($__dashboard_icons['plugins'])) { dc_check_store_update($core->plugins, $core->blog->settings->system->store_plugin_url, 'plugins', $__dashboard_icons['plugins']); } if (isset($__dashboard_icons['blog_theme'])) { $themes = new dcThemes($core); $themes->loadModules($core->blog->themes_path, null); dc_check_store_update($themes, $core->blog->settings->system->store_theme_url, 'blog-theme', $__dashboard_icons['blog_theme']); } # Latest news for dashboard $__dashboard_items = new ArrayObject(array(new ArrayObject(),new ArrayObject())); $dashboardItem = 0; if ($core->auth->user_prefs->dashboard->dcnews) { try { if (empty($__resources['rss_news'])) { throw new Exception(); } $feed_reader = new feedReader; $feed_reader->setCacheDir(DC_TPL_CACHE); $feed_reader->setTimeout(2); $feed_reader->setUserAgent('Dotclear - http://www.dotclear.org/'); $feed = $feed_reader->parse($__resources['rss_news']); if ($feed) { $latest_news = '

    '.__('Dotclear news').'

    '; $i = 1; foreach ($feed->items as $item) { $dt = isset($item->link) ? ''. $item->title.' ' : $item->title; if ($i < 3) { $latest_news .= '
    '.$dt.'
    '. '

    '.dt::dt2str(__('%d %B %Y:'),$item->pubdate,'Europe/Paris').' '. ''.text::cutString(html::clean($item->content),120).'...

    '; } else { $latest_news .= '
    '.$dt.'
    '. '
    '.dt::dt2str(__('%d %B %Y:'),$item->pubdate,'Europe/Paris').'
    '; } $i++; if ($i > 2) { break; } } $latest_news .= '
    '; $__dashboard_items[$dashboardItem][] = $latest_news; $dashboardItem++; } } catch (Exception $e) {} } # Documentation links if ($core->auth->user_prefs->dashboard->doclinks) { if (!empty($__resources['doc'])) { $doc_links = '

    '.__('Documentation and support').'

      '; foreach ($__resources['doc'] as $k => $v) { $doc_links .= '
    • '.$k. '
    • '; } $doc_links .= '
    '; $__dashboard_items[$dashboardItem][] = $doc_links; $dashboardItem++; } } $core->callBehavior('adminDashboardItems', $core, $__dashboard_items); # Dashboard content $dashboardContents = ''; $__dashboard_contents = new ArrayObject(array(new ArrayObject,new ArrayObject)); $core->callBehavior('adminDashboardContents', $core, $__dashboard_contents); # Editor stuff $admin_post_behavior = ''; if ($core->auth->user_prefs->dashboard->quickentry) { if ($core->auth->check('usage,contentadmin',$core->blog->id)) { $post_format = $core->auth->getOption('post_format'); $post_editor = $core->auth->getOption('editor'); if ($post_editor && !empty($post_editor[$post_format])) { // context is not post because of tags not available $admin_post_behavior = $core->callBehavior('adminPostEditor', $post_editor[$post_format], 'quickentry', array('#post_content'),$post_format); } } } /* DISPLAY -------------------------------------------------------- */ dcPage::open(__('Dashboard'), dcPage::jsLoad('js/_index.js'). $admin_post_behavior. # --BEHAVIOR-- adminDashboardHeaders $core->callBehavior('adminDashboardHeaders'), dcPage::breadcrumb( array( __('Dashboard').' : '.html::escapeHTML($core->blog->name) => '' ), array('home_link' =>false) ) ); # Dotclear updates notifications if ($core->auth->isSuperAdmin() && is_readable(DC_DIGESTS)) { $updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions'); $new_v = $updater->check(DC_VERSION); $version_info = $new_v ? $updater->getInfoURL() : ''; if ($updater->getNotify() && $new_v) { echo '

    '.sprintf(__('Dotclear %s is available!'),$new_v).'

    '. '

    '.sprintf(__('Upgrade now'),$new_v).' '. ' 1)).'">'.__('Remind me later').''. ($version_info ? '

    '. '

    '.__('Information about this version').'' : '').'

    '. '
    '; } } if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->getBlogCount() > 1) { echo '

    1)).'" class="button">'.__('Make this blog my default blog').'

    '; } if ($core->blog->status == 0) { echo '

    '.__('This blog is offline').'.

    '; } elseif ($core->blog->status == -1) { echo '

    '.__('This blog is removed').'.

    '; } if (!defined('DC_ADMIN_URL') || !DC_ADMIN_URL) { echo '

    '. sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_URL'). ' '.__('See documentation for more information.'). '

    '; } if (!defined('DC_ADMIN_MAILFROM') || !DC_ADMIN_MAILFROM) { echo '

    '. sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_MAILFROM'). ' '.__('See documentation for more information.'). '

    '; } $err = array(); # Check cache directory if ( $core->auth->isSuperAdmin() ) { if (!is_dir(DC_TPL_CACHE) || !is_writable(DC_TPL_CACHE)) { $err[] = '

    '.__("The cache directory does not exist or is not writable. You must create this directory with sufficient rights and affect this location to \"DC_TPL_CACHE\" in inc/config.php file.").'

    '; } } else { if (!is_dir(DC_TPL_CACHE) || !is_writable(DC_TPL_CACHE)) { $err[] = '

    '.__("The cache directory does not exist or is not writable. You should contact your administrator.").'

    '; } } # Check public directory if ( $core->auth->isSuperAdmin() ) { if (!is_dir($core->blog->public_path) || !is_writable($core->blog->public_path)) { $err[] = '

    '.__("There is no writable directory /public/ at the location set in about:config \"public_path\". You must create this directory with sufficient rights (or change this setting).").'

    '; } } else { if (!is_dir($core->blog->public_path) || !is_writable($core->blog->public_path)) { $err[] = '

    '.__("There is no writable root directory for the media manager. You should contact your administrator.").'

    '; } } # Error list if (count($err) > 0) { echo '

    '.__('Error:').'

    '. '
    • '.implode("
    • ",$err).'
    '; } # Plugins install messages if (!empty($plugins_install['success'])) { echo '
    '.__('Following plugins have been installed:').'
      '; foreach ($plugins_install['success'] as $k => $v) { echo '
    • '.$k.'
    • '; } echo '
    '; } if (!empty($plugins_install['failure'])) { echo '
    '.__('Following plugins have not been installed:').'
      '; foreach ($plugins_install['failure'] as $k => $v) { echo '
    • '.$k.' ('.$v.')
    • '; } echo '
    '; } # Errors modules notifications if ($core->auth->isSuperAdmin()) { $list = $core->plugins->getErrors(); if (!empty($list)) { echo '

    '.__('Errors have occured with following plugins:').'

    '. '
    • '.implode("
    • \n
    • ", $list).'
    '; } } # Dashboard columns (processed first, as we need to know the result before displaying the icons.) $dashboardItems = ''; foreach ($__dashboard_items as $i) { if ($i->count() > 0) { $dashboardItems .= ''; foreach ($i as $v) { $dashboardItems .= $v; } $dashboardItems .= ''; } } # Dashboard elements echo '
    '; # Dashboard icons echo '
    '; foreach ($__dashboard_icons as $i) { echo '

    '. '
    '.$i[0].'

    '; } echo '
    '; if ($core->auth->user_prefs->dashboard->quickentry) { if ($core->auth->check('usage,contentadmin',$core->blog->id)) { # Getting categories $categories_combo = dcAdminCombos::getCategoriesCombo( $core->blog->getCategories(array('post_type'=>'post')) ); echo '
    '. '

    '.__('Quick entry').sprintf(' › %s',$core->auth->getOption('post_format')).'

    '. '
    '. '

    '.__('New entry').'

    '. '

    '. form::field('post_title',20,255,'','maximal'). '

    '. '

    '. form::textarea('post_content',50,10). '

    '. '

    '. form::combo('cat_id',$categories_combo).'

    '. ($core->auth->check('categories', $core->blog->id) ? '
    '. '

    '.__('Add a new category').'

    '. '

    '. form::field('new_cat_title',30,255,'','').'

    '. '

    '. form::combo('new_cat_parent',$categories_combo,'',''). '

    '. '

    '.__('This category will be created when you will save your post.').'

    '. '
    ' : ''). '

    '. ($core->auth->check('publish',$core->blog->id) ? '' : ''). $core->formNonce(). form::hidden('post_status',-2). form::hidden('post_format',$core->auth->getOption('post_format')). form::hidden('post_excerpt',''). form::hidden('post_lang',$core->auth->getInfo('user_lang')). form::hidden('post_notes',''). '

    '. '
    '. '
    '; } } foreach ($__dashboard_contents as $i) { if ($i->count() > 0) { $dashboardContents .= ''; foreach ($i as $v) { $dashboardContents .= $v; } $dashboardContents .= ''; } } if ($dashboardContents != '' || $dashboardItems != '') { echo '
    '. '
    '.$dashboardItems.$dashboardContents.'
    '. '
    '; } echo '
    '; #end dashboard-main dcPage::helpBlock('core_dashboard'); dcPage::close(); dotclear-2.8.0+dfsg/admin/install/000077500000000000000000000000001256530234200167755ustar00rootroot00000000000000dotclear-2.8.0+dfsg/admin/install/check.php000066400000000000000000000041531256530234200205660ustar00rootroot00000000000000driver() == 'mysql' || $con->driver() == 'mysqli') { if (version_compare($con->version(),'4.1','<')) { $err[] = sprintf(__('MySQL version is %s (4.1 or earlier needed).'),$con->version()); } else { $rs = $con->select('SHOW ENGINES'); $innodb = false; while ($rs->fetch()) { if (strtolower($rs->f(0)) == 'innodb' && strtolower($rs->f(1)) != 'disabled' && strtolower($rs->f(1)) != 'no') { $innodb = true; break; } } if (!$innodb) { $err[] = __('MySQL InnoDB engine is not available.'); } } } elseif ($con->driver() == 'pgsql') { if (version_compare($con->version(),'8.0','<')) { $err[] = sprintf(__('PostgreSQL version is %s (8.0 or earlier needed).'),$con->version()); } } return count($err) == 0; } dotclear-2.8.0+dfsg/admin/install/index.php000066400000000000000000000351551256530234200206260ustar00rootroot00000000000000'.__('Please set a master key (DC_MASTER_KEY) in configuration file.').'

    '; } # Check if dotclear is already installed $schema = dbSchema::init($core->con); if (in_array($core->prefix.'post',$schema->getTables())) { $can_install = false; $err = '

    '.__('Dotclear is already installed.').'

    '; } # Check system capabilites if (!dcSystemCheck($core->con,$_e)) { $can_install = false; $err = '

    '.__('Dotclear cannot be installed.').'

    • '.implode('
    • ',$_e).'
    '; } # Get information and perform install $u_email = $u_firstname = $u_name = $u_login = $u_pwd = ''; $mail_sent = false; if ($can_install && !empty($_POST)) { $u_email = !empty($_POST['u_email']) ? $_POST['u_email'] : null; $u_firstname = !empty($_POST['u_firstname']) ? $_POST['u_firstname'] : null; $u_name = !empty($_POST['u_name']) ? $_POST['u_name'] : null; $u_login = !empty($_POST['u_login']) ? $_POST['u_login'] : null; $u_pwd = !empty($_POST['u_pwd']) ? $_POST['u_pwd'] : null; $u_pwd2 = !empty($_POST['u_pwd2']) ? $_POST['u_pwd2'] : null; try { # Check user information if (empty($u_login)) { throw new Exception(__('No user ID given')); } if (!preg_match('/^[A-Za-z0-9@._-]{2,}$/',$u_login)) { throw new Exception(__('User ID must contain at least 2 characters using letters, numbers or symbols.')); } if ($u_email && !text::isEmail($u_email)) { throw new Exception(__('Invalid email address')); } if (empty($u_pwd)) { throw new Exception(__('No password given')); } if ($u_pwd != $u_pwd2) { throw new Exception(__("Passwords don't match")); } if (strlen($u_pwd) < 6) { throw new Exception(__('Password must contain at least 6 characters.')); } # Try to guess timezone $default_tz = 'Europe/London'; if (!empty($_POST['u_date']) && function_exists('timezone_open')) { if (preg_match('/\((.+)\)$/',$_POST['u_date'],$_tz)) { $_tz = $_tz[1]; $_tz = @timezone_open($_tz); if ($_tz instanceof DateTimeZone) { $_tz = @timezone_name_get($_tz); // check if timezone is valid // date_default_timezone_set throw E_NOTICE and/or E_WARNING if timezone is not valid and return false if (@date_default_timezone_set($_tz)!==false && $_tz) { $default_tz = $_tz; } } unset($_tz); } } # Create schema $_s = new dbStruct($core->con,$core->prefix); require dirname(__FILE__).'/../../inc/dbschema/db-schema.php'; $si = new dbStruct($core->con,$core->prefix); $changes = $si->synchronize($_s); # Create user $cur = $core->con->openCursor($core->prefix.'user'); $cur->user_id = $u_login; $cur->user_super = 1; $cur->user_pwd = $core->auth->crypt($u_pwd); $cur->user_name = (string) $u_name; $cur->user_firstname = (string) $u_firstname; $cur->user_email = (string) $u_email; $cur->user_lang = $dlang; $cur->user_tz = $default_tz; $cur->user_creadt = date('Y-m-d H:i:s'); $cur->user_upddt = date('Y-m-d H:i:s'); $cur->user_options = serialize($core->userDefaults()); $cur->insert(); $core->auth->checkUser($u_login); $admin_url = preg_replace('%install/index.php$%','',$_SERVER['REQUEST_URI']); $root_url = preg_replace('%/admin/install/index.php$%','',$_SERVER['REQUEST_URI']); # Create blog $cur = $core->con->openCursor($core->prefix.'blog'); $cur->blog_id = 'default'; $cur->blog_url = http::getHost().$root_url.'/index.php?'; $cur->blog_name = __('My first blog'); $core->addBlog($cur); $core->blogDefaults($cur->blog_id); $blog_settings = new dcSettings($core,'default'); $blog_settings->addNamespace('system'); $blog_settings->system->put('blog_timezone',$default_tz); $blog_settings->system->put('lang',$dlang); $blog_settings->system->put('public_url',$root_url.'/public'); $blog_settings->system->put('themes_url',$root_url.'/themes'); # date and time formats $formatDate = __('%A, %B %e %Y'); $date_formats = array('%Y-%m-%d','%m/%d/%Y','%d/%m/%Y','%Y/%m/%d','%d.%m.%Y','%b %e %Y','%e %b %Y','%Y %b %e', '%a, %Y-%m-%d','%a, %m/%d/%Y','%a, %d/%m/%Y','%a, %Y/%m/%d','%B %e, %Y','%e %B, %Y','%Y, %B %e','%e. %B %Y', '%A, %B %e, %Y','%A, %e %B, %Y','%A, %Y, %B %e','%A, %Y, %B %e','%A, %e. %B %Y'); $time_formats = array('%H:%M','%I:%M','%l:%M','%Hh%M','%Ih%M','%lh%M'); if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { $formatDate = preg_replace('#(?system->put('date_format',$formatDate); $blog_settings->system->put('date_formats',serialize($date_formats),'string','Date formats examples',true,true); $blog_settings->system->put('time_formats',serialize($time_formats),'string','Time formats examples',true,true); # Add repository URL for themes and plugins $blog_settings->system->put('store_plugin_url','http://update.dotaddict.org/dc2/plugins.xml','string','Plugins XML feed location',true,true); $blog_settings->system->put('store_theme_url','http://update.dotaddict.org/dc2/themes.xml','string','Themes XML feed location',true,true); # Add Dotclear version $cur = $core->con->openCursor($core->prefix.'version'); $cur->module = 'core'; $cur->version = (string) DC_VERSION; $cur->insert(); # Create first post $core->setBlog('default'); $cur = $core->con->openCursor($core->prefix.'post'); $cur->user_id = $u_login; $cur->post_format = 'xhtml'; $cur->post_lang = $dlang; $cur->post_title = __('Welcome to Dotclear!'); $cur->post_content = '

    '.__('This is your first entry. When you\'re ready '. 'to blog, log in to edit or delete it.').'

    '; $cur->post_content_xhtml = $cur->post_content; $cur->post_status = 1; $cur->post_open_comment = 1; $cur->post_open_tb = 0; $post_id = $core->blog->addPost($cur); # Add a comment to it $cur = $core->con->openCursor($core->prefix.'comment'); $cur->post_id = $post_id; $cur->comment_tz = $default_tz; $cur->comment_author = __('Dotclear Team'); $cur->comment_email = 'contact@dotclear.net'; $cur->comment_site = 'http://www.dotclear.org/'; $cur->comment_content = __("

    This is a comment.

    \n

    To delete it, log in and ". "view your blog's comments. Then you might remove or edit it.

    "); $core->blog->addComment($cur); # Plugins initialization define('DC_CONTEXT_ADMIN',true); $core->plugins->loadModules(DC_PLUGINS_ROOT); $plugins_install = $core->plugins->installModules(); # Add dashboard module options $core->auth->user_prefs->addWorkspace('dashboard'); $core->auth->user_prefs->dashboard->put('doclinks',true,'boolean','',null,true); $core->auth->user_prefs->dashboard->put('dcnews',true,'boolean','',null,true); $core->auth->user_prefs->dashboard->put('quickentry',true,'boolean','',null,true); # Add accessibility options $core->auth->user_prefs->addWorkspace('accessibility'); $core->auth->user_prefs->accessibility->put('nodragdrop',false,'boolean','',null,true); # Add user interface options $core->auth->user_prefs->addWorkspace('interface'); $core->auth->user_prefs->interface->put('enhanceduploader',true,'boolean','',null,true); # Add default favorites $core->favs = new dcFavorites($core); $init_favs = array('posts','new_post','newpage','comments','categories','media','blog_theme','widgets','simpleMenu','prefs','help'); $core->favs->setFavoriteIDs($init_favs,true); $step = 1; } catch (Exception $e) { $err = $e->getMessage(); } } if (!isset($step)) { $step = 0; } header('Content-Type: text/html; charset=UTF-8'); // Prevents Clickjacking as far as possible header('X-Frame-Options: SAMEORIGIN'); // FF 3.6.9+ Chrome 4.1+ IE 8+ Safari 4+ Opera 10.5+ ?> <?php echo __('Dotclear Install'); ?>
    '.__('Dotclear installation').''. '
    '; if (!is_writable(DC_TPL_CACHE)) { echo ''; } if ($can_install && !empty($err)) { echo ''; } if (!empty($_GET['wiz'])) { echo ''; } if ($can_install && $step == 0) { echo '

    '.__('User information').'

    '. '

    '.__('Please provide the following information needed to create the first user.').'

    '. '
    '. '
    '.__('User information').''. '

    '. form::field('u_firstname',30,255,html::escapeHTML($u_firstname)).'

    '. '

    '. form::field('u_name',30,255,html::escapeHTML($u_name)).'

    '. '

    '. form::field('u_email',30,255,html::escapeHTML($u_email)).'

    '. '
    '. '
    '.__('Username and password').''. '

    '. '
    '. '

    '. ''. form::password('u_pwd',30,255,'','','',false,' data-indicator="pwindicator" '). '

    '. '
    '. '
    '. '

    '. '
    '. '
    '. '

    '. '
    '. '

    '. '
    '; } elseif ($can_install && $step == 1) { # Plugins install messages $plugins_install_result = ''; if (!empty($plugins_install['success'])) { $plugins_install_result .= '
    '.__('Following plugins have been installed:').'
      '; foreach ($plugins_install['success'] as $k => $v) { $plugins_install_result .= '
    • '.$k.'
    • '; } $plugins_install_result .= '
    '; } if (!empty($plugins_install['failure'])) { $plugins_install_result .= '
    '.__('Following plugins have not been installed:').'
      '; foreach ($plugins_install['failure'] as $k => $v) { $plugins_install_result .= '
    • '.$k.' ('.$v.')
    • '; } $plugins_install_result .= '
    '; } echo '

    '.__('All done!').'

    '. $plugins_install_result. ''. '

    '.__('Your account').'

    '. '
      '. '
    • '.__('Username:').' '.html::escapeHTML($u_login).'
    • '. '
    • '.__('Password:').' '.html::escapeHTML($u_pwd).'
    • '. '
    '. '

    '.__('Your blog').'

    '. '
      '. '
    • '.__('Blog address:').' '.html::escapeHTML(http::getHost().$root_url).'/index.php?
    • '. '
    • '.__('Administration interface:').' '.html::escapeHTML(http::getHost().$admin_url).'
    • '. '
    '. '
    '. '

    '. form::hidden(array('user_id'),html::escapeHTML($u_login)). form::hidden(array('user_pwd'),html::escapeHTML($u_pwd)). '

    '. '
    '; } elseif (!$can_install) { echo '

    '.__('Installation can not be completed').'

    '. ''. '

    '.__('For the said reasons, Dotclear can not be installed. '. 'Please refer to '. 'the documentation to learn how to correct the problem.').'

    '; } ?>
    dotclear-2.8.0+dfsg/admin/install/wizard.php000066400000000000000000000174241256530234200210160ustar00rootroot00000000000000'.sprintf(__('Path %s is not writable.'),path::real(dirname(DC_RC_PATH))).'

    '. '

    '.__('Dotclear installation wizard could not create configuration file for you. '. 'You must change folder right or create the config.php '. 'file manually, please refer to '. ''. 'the documentation to learn how to do this.').'

    '; } $DBDRIVER = !empty($_POST['DBDRIVER']) ? $_POST['DBDRIVER'] : (function_exists('mysqli_connect') ? 'mysqli' : 'mysql'); $DBHOST = !empty($_POST['DBHOST']) ? $_POST['DBHOST'] : ''; $DBNAME = !empty($_POST['DBNAME']) ? $_POST['DBNAME'] : ''; $DBUSER = !empty($_POST['DBUSER']) ? $_POST['DBUSER'] : ''; $DBPASSWORD = !empty($_POST['DBPASSWORD']) ? $_POST['DBPASSWORD'] : ''; $DBPREFIX = !empty($_POST['DBPREFIX']) ? $_POST['DBPREFIX'] : 'dc_'; if (!empty($_POST)) { try { if ($DBDRIVER == 'sqlite') { if (strpos($DBNAME, '/') === false) { $sqlite_db_directory = dirname(DC_RC_PATH).'/../db/'; files::makeDir($sqlite_db_directory,true); # Can we write sqlite_db_directory ? if (!is_writable($sqlite_db_directory)) { throw new Exception(sprintf(__('Cannot write "%s" directory.'),path::real($sqlite_db_directory,false))); } $DBNAME = $sqlite_db_directory.$DBNAME; } } # Tries to connect to database try { $con = dbLayer::init($DBDRIVER,$DBHOST,$DBNAME,$DBUSER,$DBPASSWORD); } catch (Exception $e) { throw new Exception('

    ' . __($e->getMessage()) . '

    '); } # Checks system capabilites require dirname(__FILE__).'/check.php'; if (!dcSystemCheck($con,$_e)) { $can_install = false; throw new Exception('

    '.__('Dotclear cannot be installed.').'

    • '.implode('
    • ',$_e).'
    '); } # Check if dotclear is already installed $schema = dbSchema::init($con); if (in_array($DBPREFIX.'version',$schema->getTables())) { throw new Exception(__('Dotclear is already installed.')); } # Does config.php.in exist? $config_in = dirname(__FILE__).'/../../inc/config.php.in'; if (!is_file($config_in)) { throw new Exception(sprintf(__('File %s does not exist.'),$config_in)); } # Can we write config.php if (!is_writable(dirname(DC_RC_PATH))) { throw new Exception(sprintf(__('Cannot write %s file.'),DC_RC_PATH)); } # Creates config.php file $full_conf = file_get_contents($config_in); writeConfigValue('DC_DBDRIVER',$DBDRIVER,$full_conf); writeConfigValue('DC_DBHOST',$DBHOST,$full_conf); writeConfigValue('DC_DBUSER',$DBUSER,$full_conf); writeConfigValue('DC_DBPASSWORD',$DBPASSWORD,$full_conf); writeConfigValue('DC_DBNAME',$DBNAME,$full_conf); writeConfigValue('DC_DBPREFIX',$DBPREFIX,$full_conf); $admin_url = preg_replace('%install/wizard.php$%','',$_SERVER['REQUEST_URI']); writeConfigValue('DC_ADMIN_URL',http::getHost().$admin_url,$full_conf); writeConfigValue('DC_ADMIN_MAILFROM','dotclear@'.$_SERVER['HTTP_HOST'],$full_conf); writeConfigValue('DC_MASTER_KEY',md5(uniqid()),$full_conf); $fp = @fopen(DC_RC_PATH,'wb'); if ($fp === false) { throw new Exception(sprintf(__('Cannot write %s file.'),DC_RC_PATH)); } fwrite($fp,$full_conf); fclose($fp); chmod(DC_RC_PATH, 0666); $con->close(); http::redirect('index.php?wiz=1'); } catch (Exception $e) { $err = $e->getMessage(); } } function writeConfigValue($name,$val,&$str) { $val = str_replace("'","\'",$val); $str = preg_replace('/(\''.$name.'\')(.*?)$/ms','$1,\''.$val.'\');',$str); } header('Content-Type: text/html; charset=UTF-8'); // Prevents Clickjacking as far as possible header('X-Frame-Options: SAMEORIGIN'); // FF 3.6.9+ Chrome 4.1+ IE 8+ Safari 4+ Opera 10.5+ ?> <?php echo __('Dotclear installation wizard'); ?>
    '.__('Dotclear installation wizard').''. '
    '; if (!empty($err)) { echo ''; } else { echo '

    '.__('Welcome').'

    '. '

    '.__('To complete your Dotclear installation and start writing on your blog, '. 'we just need to know how to access your database and who you are. '. 'Just fill this two steps wizard with this information and we will be done.').'

    '. '

    '.__('Attention:').' '. __('this wizard may not function on every host. If it does not work for you, '. 'please refer to '. 'the documentation to learn how to create the config.php '. 'file manually.').'

    '; } echo '

    '.__('System information').'

    '. '

    '.__('Please provide the following information needed to create your configuration file.').'

    '. '
    '. '

    '. form::combo('DBDRIVER',array(__('MySQL (deprecated)')=>'mysql',__('MySQLi')=>'mysqli',__('PostgreSQL')=>'pgsql',__('SQLite')=>'sqlite'),$DBDRIVER).'

    '. '

    '. form::field('DBHOST',30,255,html::escapeHTML($DBHOST)).'

    '. '

    '. form::field('DBNAME',30,255,html::escapeHTML($DBNAME)).'

    '. '

    '. form::field('DBUSER',30,255,html::escapeHTML($DBUSER)).'

    '. '

    '. form::password('DBPASSWORD',30,255).'

    '. '

    '. form::field('DBPREFIX',30,255,html::escapeHTML($DBPREFIX)).'

    '. '

    '. '
    '; ?>
    dotclear-2.8.0+dfsg/admin/js/000077500000000000000000000000001256530234200157435ustar00rootroot00000000000000dotclear-2.8.0+dfsg/admin/js/_blog_pref.js000066400000000000000000000017761256530234200204120ustar00rootroot00000000000000function checkQueryString() { var blogUrl = $('#blog_url')[0].value; var urlScan = $('#url_scan')[0].value; errorMsg = ''; if (/.*[^\/]$/.exec(blogUrl) && urlScan=='path_info') { errorMsg = dotclear.msg.warning_path_info; } else if (/.*[^\?]$/.exec(blogUrl) && urlScan=='query_string') { errorMsg = dotclear.msg.warning_query_string; } $("p#urlwarning").remove(); if (errorMsg != '') { $("#blog_url").parents('p').after('

    '+errorMsg+'

    '); } } $(function() { var blog_url = $('#blog_url'); if (blog_url.length > 0 && !blog_url.is(':hidden')) { checkQueryString(); $('#blog_url').focusout(checkQueryString); $('body').on('change','#url_scan',checkQueryString); } $('#date_format_select,#time_format_select').change(function() { if ($(this).prop('value') == '') { return; } $('#'+$(this).attr('id').replace('_select','')).prop('value', $(this).prop('value')); $(this).parent().next('.chosen').html($(this).find(':selected').prop('label')); }); }); dotclear-2.8.0+dfsg/admin/js/_blog_theme.js000066400000000000000000000041451256530234200205510ustar00rootroot00000000000000$(function() { // expend theme info $('.module-sshot').not('.current-theme .module-sshot').each(function(){ var bar = $('
    ').addClass('bloc-toggler'); $(this).after( $(bar).toggleWithLegend($(this).parent().children('.toggle-bloc'),{ img_on_src: dotclear.img_plus_theme_src, img_on_alt: dotclear.img_plus_theme_alt, img_off_src: dotclear.img_minus_theme_src, img_off_alt: dotclear.img_minus_theme_alt, legend_click: true })); $(this).children('img').click(function(){ $(this).parent().parent().children('.bloc-toggler').click(); }); }); // dirty short search blocker $('div.modules-search form input[type=submit]').click(function(){ var mlen = $('input[name=m_search]',$(this).parent()).val(); if (mlen.length > 2){return true;}else{return false;} }); // checkboxes selection $('.checkboxes-helpers').each(function() { dotclear.checkboxesHelpers(this); }); // actions tests $('.modules-form-actions').each(function(){ var rxActionType = /^[^\[]+/; var rxActionValue = /([^\[]+)\]$/; var checkboxes = $(this).find('input[type=checkbox]'); // check if submit is a global action or one line action $("input[type=submit]",this).click(function() { var keyword = $(this).attr('name'); var maction = keyword.match(rxActionType); var action = maction[0]; var mvalues = keyword.match(rxActionValue); // action on multiple modules if (!mvalues) { var checked = false; // check if there is checkboxes in form if(checkboxes.length > 0) { // check if there is at least one checkbox checked $(checkboxes).each(function() { if (this.checked) { checked = true; } }); if (!checked) { //alert(dotclear.msg.no_selection); return false; } } // confirm delete if (action == 'delete') { return window.confirm(dotclear.msg.confirm_delete_themes); } // action on one module }else { var module = mvalues[1]; // confirm delete if (action == 'delete') { return window.confirm(dotclear.msg.confirm_delete_theme.replace('%s',module)); } } return true; }); }); }); dotclear-2.8.0+dfsg/admin/js/_categories.js000066400000000000000000000014471256530234200205730ustar00rootroot00000000000000$(function() { if ($.fn['nestedSortable']!==undefined) { $('#categories ul li').css('cursor','move'); $('#save-set-order').prop('disabled',true).addClass('disabled'); $('#categories ul').nestedSortable({ listType: 'ul', items: 'li', placeholder: 'placeholder', update: function() { $('#categories_order').attr('value',JSON.stringify($('#categories ul').nestedSortable('toArray'))); $('#save-set-order').prop('disabled',false).removeClass('disabled'); } }); } $('input[name^="delete"]').click(function() { return window.confirm(dotclear.msg.confirm_delete_category.replace('%s',$(this).parents('li').first().find('.cat-title label a').text())); }); $('input[name="reset"]').click(function() { return window.confirm(dotclear.msg.confirm_reorder_categories); }); }); dotclear-2.8.0+dfsg/admin/js/_category.js000066400000000000000000000002641256530234200202570ustar00rootroot00000000000000$(function() { dotclear.hideLockable(); if ($.isFunction(jsToolBar)) { var tbCategory = new jsToolBar(document.getElementById('cat_desc')); tbCategory.draw('xhtml'); } }); dotclear-2.8.0+dfsg/admin/js/_comment.js000066400000000000000000000004361256530234200201050ustar00rootroot00000000000000$(function() { if ($.isFunction(jsToolBar)) { var tbComment = new jsToolBar(document.getElementById('comment_content')); tbComment.draw('xhtml'); } $('#comment-form input[name="delete"]').click(function() { return window.confirm(dotclear.msg.confirm_delete_comment); }); }); dotclear-2.8.0+dfsg/admin/js/_comments.js000066400000000000000000000043711256530234200202720ustar00rootroot00000000000000dotclear.viewCommentContent = function(line,action) { var action = action || 'toggle'; var commentId = $(line).attr('id').substr(1); var tr = document.getElementById('ce'+commentId); if ( !tr && ( action == 'toggle' || action == 'open' ) ) { tr = document.createElement('tr'); tr.id = 'ce'+commentId; var td = document.createElement('td'); td.colSpan = 6; td.className = 'expand'; tr.appendChild(td); // Get comment content $.get('services.php',{f:'getCommentById',id: commentId},function(data) { var rsp = $(data).children('rsp')[0]; if (rsp.attributes[0].value == 'ok') { var comment = $(rsp).find('comment_display_content').text(); if (comment) { $(td).append(comment); var comment_email = $(rsp).find('comment_email').text(); var comment_site = $(rsp).find('comment_site').text(); var comment_ip = $(rsp).find('comment_ip').text(); var comment_spam_disp = $(rsp).find('comment_spam_disp').text(); $(td).append('

    ' + dotclear.msg.website + ' ' + comment_site + '
    ' + '' + dotclear.msg.email + ' ' + comment_email + '
    ' + '' + dotclear.msg.ip_address + ' ' + comment_ip + '' + '
    ' + comment_spam_disp + '

    '); } } else { alert($(rsp).find('message').text()); } }); $(line).toggleClass('expand'); line.parentNode.insertBefore(tr,line.nextSibling); } else if (tr && tr.style.display == 'none' && ( action == 'toggle' || action == 'open' ) ) { $(tr).css('display', 'table-row'); $(line).addClass('expand'); } else if (tr && tr.style.display != 'none' && ( action == 'toggle' || action == 'close' ) ) { $(tr).css('display', 'none'); $(line).removeClass('expand'); } }; $(function() { $.expandContent({ line:$('#form-comments tr:not(.line)'), lines:$('#form-comments tr.line'), callback:dotclear.viewCommentContent }); $('.checkboxes-helpers').each(function() { dotclear.checkboxesHelpers(this); }); $('#form-comments td input[type=checkbox]').enableShiftClick(); dotclear.commentsActionsHelper(); $('form input[type=submit][name=delete_all_spam]').click(function(){ return window.confirm(dotclear.msg.confirm_spam_delete); }); }); dotclear-2.8.0+dfsg/admin/js/_index.js000066400000000000000000000050021256530234200175440ustar00rootroot00000000000000$(function() { var f = $('#quick-entry'); if (f.length > 0) { if ($.isFunction(jsToolBar)) { var contentTb = new jsToolBar($('#post_content',f)[0]); contentTb.switchMode($('#post_format',f).val()); } $('input[name=save]',f).click(function() { quickPost(f,-2); return false; }); if ($('input[name=save-publish]',f).length > 0) { var btn = $(''); $('input[name=save-publish]',f).remove(); $('input[name=save]',f).after(btn).after(' '); btn.click(function() { quickPost(f,1); return false; }); } function quickPost(f,status) { if ($.isFunction('jsToolBar') && (contentTb.getMode() == 'wysiwyg')) { contentTb.syncContents('iframe'); } var params = { f: 'quickPost', xd_check: dotclear.nonce, post_title: $('#post_title',f).val(), post_content: $('#post_content',f).val(), cat_id: $('#cat_id',f).val(), post_status: status, post_format: $('#post_format',f).val(), post_lang: $('#post_lang',f).val(), new_cat_title: $('#new_cat_title',f).val(), new_cat_parent: $('#new_cat_parent',f).val() } $('p.qinfo',f).remove(); $.post('services.php',params,function(data) { if ($('rsp[status=failed]',data).length > 0) { var msg = '

    ' + dotclear.msg.error + ' ' + $('rsp',data).text() + '

    '; } else { var msg = '

    ' + dotclear.msg.entry_created + ' - ' + dotclear.msg.edit_entry + ''; if ($('rsp>post',data).attr('post_status') == 1) { msg += ' - ' + dotclear.msg.view_entry + ''; } msg += '

    '; $('#post_title',f).val(''); $('#post_content',f).val(''); $('#post_content',f).change(); if ($.isFunction('jsToolBar') && (contentTb.getMode() == 'wysiwyg')) { contentTb.syncContents('textarea'); } $('#cat_id',f).val('0'); $('#new_cat_title',f).val(''); $('#new_cat_parent',f).val('0'); } $('fieldset',f).prepend(msg); }); } $('#new_cat').toggleWithLegend($('#new_cat').parent().children().not('#new_cat'), { // no cookie on new category as we don't use this every day legend_click: true }); } // allow to hide quick entry div, and remember choice $('#quick h3').toggleWithLegend($('#quick').children().not('h3'),{ legend_click: true, user_pref: 'dcx_quick_entry' }); }); dotclear-2.8.0+dfsg/admin/js/_langs.js000066400000000000000000000003671256530234200175520ustar00rootroot00000000000000$(function() { $('table.plugins form input[type=submit][name=delete]').click(function() { var l_name = $(this).parents('tr.line').find('td:first').text(); return window.confirm(dotclear.msg.confirm_delete_lang.replace('%s',l_name)); }); }); dotclear-2.8.0+dfsg/admin/js/_media.js000066400000000000000000000137411256530234200175250ustar00rootroot00000000000000(function($) { $.fn.enhancedUploader = function() { return this.each(function() { var me = $(this); function enableButton(button) { button.prop('disabled',false).removeClass('disabled'); } function disableButton(button) { button.prop('disabled',true).addClass('disabled'); } function displayMessageInQueue(n) { var msg = ''; if (n==1) { msg = dotclear.jsUpload.msg.file_in_queue; } else if (n>1) { msg = dotclear.jsUpload.msg.files_in_queue; msg = msg.replace(/%d/,n); } else { msg = dotclear.jsUpload.msg.no_file_in_queue; } $('.queue-message',me).html(msg); } $('.button.choose_files').click(function(e) { // Use the native click() of the file input. $('#upfile').click(); e.preventDefault(); }); $('.button.cancel', '#fileupload .fileupload-buttonbar').click(function(e) { $('.button.cancel','#fileupload .fileupload-buttonbar').hide(); disableButton($('.button.start','#fileupload .fileupload-buttonbar')); displayMessageInQueue(0); }); $(me).on('click','.cancel',function(e) { if ($('.fileupload-ctrl .files .template-upload', me).length==0) { $('.button.cancel','#fileupload .fileupload-buttonbar').hide(); disableButton($('.button.start','#fileupload .fileupload-buttonbar')); } displayMessageInQueue($('.files .template-upload',me).length); }); $('.button.clean', me).click(function(e) { $('.fileupload-ctrl .files .template-download', me).slideUp(500, function() { $(this).remove(); }); $(this).hide(); e.preventDefault(); }); $(me).fileupload({ url: $(me).attr('action'), autoUpload: false, sequentialUploads: true, uploadTemplateId: null, downloadTemplateId: null, uploadTemplate: template_upload, downloadTemplate: template_download }).bind('fileuploadadd', function(e, data) { $('.button.cancel','#fileupload .fileupload-buttonbar').show(); enableButton($('.button.start','#fileupload .fileupload-buttonbar')); }).bind('fileuploadadded', function(e, data) { displayMessageInQueue($('.files .template-upload',me).length); }).bind('fileuploaddone', function(e, data) { if (data.result.files[0].html !==undefined) { $('.media-list .files-group').append(data.result.files[0].html); $('#form-medias .hide').removeClass('hide'); } $('.button.clean',me).show(); }).bind('fileuploadalways', function(e, data) { displayMessageInQueue($('.files .template-upload',me).length); if ($('.fileupload-ctrl .files .template-upload',me).length==0) { $('.button.cancel','#fileupload .fileupload-buttonbar').hide(); disableButton($('.button.start','#fileupload .fileupload-buttonbar')); } }); var $container = $(me).parent(); var $msg,label; if ($container.hasClass('enhanced_uploader')) { $msg = dotclear.msg.enhanced_uploader_disable; label = dotclear.jsUpload.msg.choose_files; $(me).fileupload({disabled:false}); displayMessageInQueue(0); disableButton($('.button.start','#fileupload .fileupload-buttonbar')); } else { $msg = dotclear.msg.enhanced_uploader_activate; label = dotclear.jsUpload.msg.choose_file; } $('

    ' + $msg + '

    ').click(function(e) { if ($container.hasClass('enhanced_uploader')) { $msg = dotclear.msg.enhanced_uploader_activate; label = dotclear.jsUpload.msg.choose_file; $('#upfile').attr('multiple', false); enableButton($('.button.start','#fileupload .fileupload-buttonbar')); // when a user has clicked enhanced_uploader, and has added files // We must remove files in table $('.files .upload-file', me).remove(); $('.button.cancel,.button.clean','#fileupload .fileupload-buttonbar').hide(); $(me).fileupload({disabled:true}); $('.queue-message',me).html('').hide(); } else { $msg = dotclear.msg.enhanced_uploader_disable; label = dotclear.jsUpload.msg.choose_files; $('#upfile').attr('multiple', true); var startButton = $('.button.start','#fileupload .fileupload-buttonbar'); disableButton(startButton); startButton.show(); $(me).fileupload({disabled:false}); $('.queue-message',me).show(); displayMessageInQueue(0); } $(this).find('a').text($msg); $('.add-label', me).text(label); $container.toggleClass('enhanced_uploader'); e.preventDefault(); }).appendTo(me); }); }; })(jQuery); $(function() { $('#fileupload').enhancedUploader(); $('.checkboxes-helpers').each(function() { dotclear.checkboxesHelpers(this); }); $('#form-medias').submit(function() { var count_checked = $('input[name="medias[]"]:checked', $(this)).length; if (count_checked==0) { return false; } return window.confirm(dotclear.msg.confirm_delete_medias.replace('%d',count_checked)); }); // attach media $('#form-medias').on('click', '.media-item .attach-media', function(e) { var parts = $(this).prop('href').split('?'); var str_params = parts[1].split('&'); var postData = {}; for (var n=0;n
    '; echo '

    '.form::hidden(array('d'),$d).'

    '. ''. ''. ''; } # Empty remove form (for javascript actions) echo ''; if ($core_media_writable || $core_media_archivable) { echo ''; } if (!$popup) { echo '

    '.sprintf(__('Current settings for medias and images are defined in %s'), ''.__('Blog parameters').'').'

    '; } call_user_func($close_f); /* ----------------------------------------------------- */ function mediaItemLine($f,$i) { global $core, $page_url, $popup, $post_id, $plugin_id,$page_url_params; $fname = $f->basename; $class = 'media-item media-col-'.($i%2); if ($f->d) { $link = $core->adminurl->get('admin.media',array_merge($page_url_params,array('d' => html::sanitizeURL($f->relname) ))); if ($f->parent) { $fname = '..'; $class .= ' media-folder-up'; } else { $class .= ' media-folder'; } } else { $params = new ArrayObject( array( 'id' => $f->media_id, 'plugin_id' => $plugin_id, 'popup' => $popup, 'post_id' => $post_id ) ); $core->callBehavior('adminMediaURLParams',$params); $params = (array) $params; $link = $core->adminurl->get( 'admin.media.item', $params ); } $maxchars = 36; if (strlen($fname) > $maxchars) { $fname = substr($fname, 0, $maxchars-4).'...'.($f->d ? '' : files::getExtension($fname)); } $res = '

    '. ''.$fname.'

    '; $lst = ''; if (!$f->d) { $lst .= '
  • '.$f->media_title.'
  • '. '
  • '. $f->media_dtstr.' - '. files::size($f->size).' - '. ''.__('open').''. '
  • '; } $act = ''; if ($post_id && !$f->d) { $act .= ' $f->media_id, 'post_id' => $post_id,'attach' => 1)). '">'. ''.__('Attach this file to entry').''. ''; } if ($popup && !$f->d) { $act .= ''.__('Insert this file into entry').' '; } if ($f->del) { if (!$popup && !$f->d) { $act .= form::checkbox(array('medias[]', 'media_'.rawurlencode($f->basename)),rawurlencode($f->basename)); } else { $act .= ''. ''.__('Delete').''; } } $lst .= ($act != '' ? '
  •  '.$act.'
  • ' : ''); // Show player if relevant $file_type = explode('/',$f->type); if ($file_type[0] == 'audio') { $lst .= '
  • '.dcMedia::audioPlayer($f->type,$f->file_url,$core->adminurl->get("admin.home",array('pf' => 'player_mp3.swf'))).'
  • '; } $res .= ($lst != '' ? '
      '.$lst.'
    ' : ''); $res .= '
    '; return $res; } dotclear-2.8.0+dfsg/admin/media_item.php000066400000000000000000000551561256530234200201510ustar00rootroot00000000000000blog->getPosts(array('post_id'=>$post_id)); if ($post->isEmpty()) { $post_id = null; } $post_title = $post->post_title; unset($post); } $file = null; $popup = (integer) !empty($_REQUEST['popup']); $plugin_id = isset($_REQUEST['plugin_id']) ? html::sanitizeURL($_REQUEST['plugin_id']) : ''; $page_url_params = array('popup' => $popup,'post_id' => $post_id); $media_page_url_params = array('popup' => $popup,'post_id' => $post_id); if ($plugin_id != '') { $page_url_params['plugin_id'] = $plugin_id; $media_page_url_params['plugin_id'] = $plugin_id; } $id = !empty($_REQUEST['id']) ? (integer) $_REQUEST['id'] : ''; if ($id != '') { $page_url_params ['id'] = $id; } if ($popup) { $open_f = array('dcPage','openPopup'); $close_f = array('dcPage','closePopup'); } else { $open_f = array('dcPage','open'); $close_f = create_function('',"dcPage::helpBlock('core_media'); dcPage::close();"); } $core_media_writable = false; try { $core->media = new dcMedia($core); if ($id) { $file = $core->media->getFile($id); } if ($file === null) { throw new Exception(__('Not a valid file')); } $core->media->chdir(dirname($file->relname)); $core_media_writable = $core->media->writable(); # Prepare directories combo box $dirs_combo = array(); foreach ($core->media->getDBDirs() as $v) { $dirs_combo['/'.$v] = $v; } # Add parent and direct childs directories if any $core->media->getFSDir(); foreach ($core->media->dir['dirs'] as $k => $v) { $dirs_combo['/'.$v->relname] = $v->relname; } ksort($dirs_combo); } catch (Exception $e) { $core->error->add($e->getMessage()); } # Upload a new file if ($file && !empty($_FILES['upfile']) && $file->editable && $core_media_writable) { try { files::uploadStatus($_FILES['upfile']); $core->media->uploadFile($_FILES['upfile']['tmp_name'],$file->basename,null,false,true); dcPage::addSuccessNotice(__('File has been successfully updated.')); $core->adminurl->redirect('admin.media.item',$page_url_params); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Update file if ($file && !empty($_POST['media_file']) && $file->editable && $core_media_writable) { $newFile = clone $file; $newFile->basename = $_POST['media_file']; if ($_POST['media_path']) { $newFile->dir = $_POST['media_path']; $newFile->relname = $_POST['media_path'].'/'.$newFile->basename; } else { $newFile->dir = ''; $newFile->relname = $newFile->basename; } $newFile->media_title = $_POST['media_title']; $newFile->media_dt = strtotime($_POST['media_dt']); $newFile->media_dtstr = $_POST['media_dt']; $newFile->media_priv = !empty($_POST['media_private']); try { $core->media->updateFile($file,$newFile); dcPage::addSuccessNotice(__('File has been successfully updated.')); $page_url_params['tab'] = 'media-details-tab'; $core->adminurl->redirect('admin.media.item',$page_url_params); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Update thumbnails if (!empty($_POST['thumbs']) && $file->media_type == 'image' && $file->editable && $core_media_writable) { try { $foo = null; $core->media->mediaFireRecreateEvent($file); dcPage::addSuccessNotice(__('Thumbnails have been successfully updated.')); $page_url_params['tab'] = 'media-details-tab'; $core->adminurl->redirect('admin.media.item',$page_url_params); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Unzip file if (!empty($_POST['unzip']) && $file->type == 'application/zip' && $file->editable && $core_media_writable) { try { $unzip_dir = $core->media->inflateZipFile($file,$_POST['inflate_mode'] == 'new'); dcPage::addSuccessNotice(__('Zip file has been successfully extracted.')); $media_page_url_params['d'] = $unzip_dir; $core->adminurl->redirect('admin.media',$media_page_url_params); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Save media insertion settings for the blog if (!empty($_POST['save_blog_prefs'])) { if (!empty($_POST['pref_src'])) { foreach (array_reverse($file->media_thumb) as $s => $v) { if ($v == $_POST['pref_src']) { $core->blog->settings->system->put('media_img_default_size',$s); break; } } } if (!empty($_POST['pref_alignment'])) { $core->blog->settings->system->put('media_img_default_alignment',$_POST['pref_alignment']); } if (!empty($_POST['pref_insertion'])) { $core->blog->settings->system->put('media_img_default_link',($_POST['pref_insertion'] == 'link')); } dcPage::addSuccessNotice(__('Default media insertion settings have been successfully updated.')); $core->adminurl->redirect('admin.media.item',$page_url_params); } # Function to get image title based on meta function dcGetImageTitle($file,$pattern,$dto_first=false,$no_date_alone=false) { $res = array(); $pattern = preg_split('/\s*;;\s*/',$pattern); $sep = ', '; $dates = 0; $items = 0; foreach ($pattern as $v) { if ($v == 'Title') { if ($file->media_title != '') { $res[] = $file->media_title; } $items++; } elseif ($file->media_meta->{$v}) { if ((string) $file->media_meta->{$v} != '') { $res[] = (string) $file->media_meta->{$v}; } $items++; } elseif (preg_match('/^Date\((.+?)\)$/u',$v,$m)) { if ($dto_first && ($file->media_meta->DateTimeOriginal != 0)) { $res[] = dt::dt2str($m[1],(string) $file->media_meta->DateTimeOriginal); } else { $res[] = dt::str($m[1],$file->media_dt); } $items++; $dates++; } elseif (preg_match('/^DateTimeOriginal\((.+?)\)$/u',$v,$m) && $file->media_meta->DateTimeOriginal) { $res[] = dt::dt2str($m[1],(string) $file->media_meta->DateTimeOriginal); $items++; $dates++; } elseif (preg_match('/^separator\((.*?)\)$/u',$v,$m)) { $sep = $m[1]; } } if ($no_date_alone && $dates == count($res) && $dates < $items) { // On ne laisse pas les dates seules, sauf si ce sont les seuls items du pattern (hors séparateur) return ''; } return implode($sep,$res); } /* DISPLAY Main page -------------------------------------------------------- */ $starting_scripts = '". dcPage::jsLoad('js/_media_item.js'); if ($popup && !empty($plugin_id)) { $starting_scripts .= $core->callBehavior('adminPopupMedia', $plugin_id); } $temp_params = $media_page_url_params; $temp_params['d']='%s'; $bc_template = $core->adminurl->get('admin.media',$temp_params,'&',true); $temp_params['d']=''; $home_url=$core->adminurl->get('admin.media',$temp_params); call_user_func($open_f,__('Media manager'), $starting_scripts. dcPage::jsDatePicker(). ($popup ? dcPage::jsPageTabs($tab) : ''), dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', __('Media manager') => $home_url, $core->media->breadCrumb($bc_template).''.$file->basename.'' => '' ), array( 'home_link' => !$popup, 'hl' => false ) ) ); if ($popup) { // Display notices echo dcPage::notices(); } if ($file === null) { call_user_func($close_f); exit; } if (!empty($_GET['fupd']) || !empty($_GET['fupl'])) { dcPage::success(__('File has been successfully updated.')); } if (!empty($_GET['thumbupd'])) { dcPage::success(__('Thumbnails have been successfully updated.')); } if (!empty($_GET['blogprefupd'])) { dcPage::success(__('Default media insertion settings have been successfully updated.')); } # Get major file type (first part of mime type) $file_type = explode('/',$file->type); # Insertion popup if ($popup) { $media_desc = $file->media_title; echo '
    '. '

    '.__('Insert media item').'

    '. '
    '; $media_img_default_size = $core->blog->settings->system->media_img_default_size; if ($media_img_default_size == '') { $media_img_default_size = 'm'; } $media_img_default_alignment = $core->blog->settings->system->media_img_default_alignment; if ($media_img_default_alignment == '') { $media_img_default_alignment = 'none'; } $media_img_default_link = (boolean)$core->blog->settings->system->media_img_default_link; if ($file->media_type == 'image') { $media_type = 'image'; $media_desc = dcGetImageTitle($file, $core->blog->settings->system->media_img_title_pattern, $core->blog->settings->system->media_img_use_dto_first, $core->blog->settings->system->media_img_no_date_alone); if ($media_desc == $file->basename) { $media_desc = ''; } echo '

    '.__('Image size:').'

    '; $s_checked = false; echo '

    '; foreach (array_reverse($file->media_thumb) as $s => $v) { $s_checked = ($s == $media_img_default_size); echo '
    '; } $s_checked = (!isset($file->media_thumb[$media_img_default_size])); echo '
    '; echo '

    '; echo '
    '. '

    '.__('Image alignment').'

    '; $i_align = array( 'none' => array(__('None'),($media_img_default_alignment == 'none' ? 1 : 0)), 'left' => array(__('Left'),($media_img_default_alignment == 'left' ? 1 : 0)), 'right' => array(__('Right'),($media_img_default_alignment == 'right' ? 1 : 0)), 'center' => array(__('Center'),($media_img_default_alignment == 'center' ? 1 : 0)) ); echo '

    '; foreach ($i_align as $k => $v) { echo '
    '; } echo '

    '; echo '
    '; echo '
    '. '

    '.__('Image insertion').'

    '. '

    '. '
    '. ''. '

    '. '
    '; } elseif ($file_type[0] == 'audio') { $media_type = 'mp3'; echo '
    '. '

    '.__('MP3 disposition').'

    '; dcPage::message(__("Please note that you cannot insert mp3 files with visual editor."),false); $i_align = array( 'none' => array(__('None'),($media_img_default_alignment == 'none' ? 1 : 0)), 'left' => array(__('Left'),($media_img_default_alignment == 'left' ? 1 : 0)), 'right' => array(__('Right'),($media_img_default_alignment == 'right' ? 1 : 0)), 'center' => array(__('Center'),($media_img_default_alignment == 'center' ? 1 : 0)) ); echo '

    '; foreach ($i_align as $k => $v) { echo '
    '; } $public_player_style = unserialize($core->blog->settings->themes->mp3player_style); $public_player = dcMedia::audioPlayer($file->type,$file->file_url,$core->blog->getQmarkURL().'pf=player_mp3.swf',$public_player_style); echo form::hidden('public_player',html::escapeHTML($public_player)); echo '

    '; echo '
    '; } elseif ($file_type[0] == 'video') { $media_type = 'flv'; dcPage::message(__("Please note that you cannot insert video files with visual editor."),false); echo '
    '. '

    '.__('Video size').'

    '. '

    '. form::field('video_w',3,4,400).' '. ' '. form::field('video_h',3,4,300). '

    '. '
    '; echo '
    '. '

    '.__('Video disposition').'

    '; $i_align = array( 'none' => array(__('None'),($media_img_default_alignment == 'none' ? 1 : 0)), 'left' => array(__('Left'),($media_img_default_alignment == 'left' ? 1 : 0)), 'right' => array(__('Right'),($media_img_default_alignment == 'right' ? 1 : 0)), 'center' => array(__('Center'),($media_img_default_alignment == 'center' ? 1 : 0)) ); echo '

    '; foreach ($i_align as $k => $v) { echo '
    '; } $public_player_style = unserialize($core->blog->settings->themes->flvplayer_style); $public_player = dcMedia::videoPlayer($file->type,$file->file_url,$core->blog->getQmarkURL().'pf=player_flv.swf',$public_player_style); echo form::hidden('public_player',html::escapeHTML($public_player)); echo '

    '; echo '
    '; } else { $media_type = 'default'; echo '

    '.__('Media item will be inserted as a link.').'

    '; } echo '

    '. ''.__('Insert').' '. ''.__('Cancel').''. form::hidden(array('type'),html::escapeHTML($media_type)). form::hidden(array('title'),html::escapeHTML($file->media_title)). form::hidden(array('description'),html::escapeHTML($media_desc)). form::hidden(array('url'),$file->file_url). '

    '; echo '
    '; if ($media_type != 'default') { echo '
    '. '
    '. '

    '.__('Make current settings as default').' '. ''. form::hidden(array('pref_src'),''). form::hidden(array('pref_alignment'),''). form::hidden(array('pref_insertion'),''). $core->adminurl->getHiddenFormFields('admin.media.item',$page_url_params). $core->formNonce().'

    '. '
    '.'
    '; } echo '
    '; } if ($popup) { echo '
    '; } else { echo '

    '.__('Media details').'

    '; } echo '

    '; echo '
    '. '
    '; if ($file->media_image) { $thumb_size = !empty($_GET['size']) ? $_GET['size'] : 's'; if (!isset($core->media->thumb_sizes[$thumb_size]) && $thumb_size != 'o') { $thumb_size = 's'; } if (isset($file->media_thumb[$thumb_size])) { echo '

    '; } elseif ($thumb_size == 'o') { $S = getimagesize($file->file); $class = ($S[1] > 500) ? ' class="overheight"' : ''; unset($S); echo '

    '; } echo '

    '.__('Available sizes:').' '; foreach (array_reverse($file->media_thumb) as $s => $v) { $strong_link = ($s == $thumb_size) ? '%s' : '%s'; printf($strong_link,' $s,'tab' => 'media-details-tab'))).'">'.$core->media->thumb_sizes[$s][2].' | '); } echo ' "o","tab"=>"media-details-tab"))).'">'.__('original').''; echo '

    '; } // Show player if relevant if ($file_type[0] == 'audio') { echo dcMedia::audioPlayer($file->type,$file->file_url,$core->adminurl->get("admin.home",array('pf' => 'player_mp3.swf'))); } if ($file_type[0] == 'video') { echo dcMedia::videoPlayer($file->type,$file->file_url,$core->adminurl->get("admin.home",array('pf' => 'player_flv.swf'))); } echo '

    '.__('Media details').'

    '. '
      '. '
    • '.__('File owner:').' '.$file->media_user.'
    • '. '
    • '.__('File type:').' '.$file->type.'
    • '. '
    • '.__('File size:').' '.files::size($file->size).'
    • '. '
    • '.__('File URL:').' '.$file->file_url.'
    • '. '
    '; if (empty($_GET['find_posts'])) { echo '

    1,"tab"=>"media-details-tab"))).'">'. __('Show entries containing this media').'

    '; } else { echo '

    '.__('Entries containing this media').'

    '; $params = array( 'post_type' => '', 'from' => 'LEFT OUTER JOIN '.$core->prefix.'post_media PM ON P.post_id = PM.post_id ', 'sql' => 'AND ('. 'PM.media_id = '.(integer) $id.' '. "OR post_content_xhtml LIKE '%".$core->con->escape($file->relname)."%' ". "OR post_excerpt_xhtml LIKE '%".$core->con->escape($file->relname)."%' " ); if ($file->media_image) { # We look for thumbnails too if (preg_match('#^http(s)?://#',$core->blog->settings->system->public_url)) { $media_root = $core->blog->settings->system->public_url; } else { $media_root = $core->blog->host.path::clean($core->blog->settings->system->public_url).'/'; } foreach ($file->media_thumb as $v) { $v = preg_replace('/^'.preg_quote($media_root,'/').'/','',$v); $params['sql'] .= "OR post_content_xhtml LIKE '%".$core->con->escape($v)."%' "; $params['sql'] .= "OR post_excerpt_xhtml LIKE '%".$core->con->escape($v)."%' "; } } $params['sql'] .= ') '; $rs = $core->blog->getPosts($params); if ($rs->isEmpty()) { echo '

    '.__('No entry seems contain this media.').'

    '; } else { echo '
      '; while ($rs->fetch()) { $img = '%1$s'; switch ($rs->post_status) { case 1: $img_status = sprintf($img,__('published'),'check-on.png'); break; case 0: $img_status = sprintf($img,__('unpublished'),'check-off.png'); break; case -1: $img_status = sprintf($img,__('scheduled'),'scheduled.png'); break; case -2: $img_status = sprintf($img,__('pending'),'check-wrn.png'); break; } echo '
    • '.$img_status.' '.''. $rs->post_title.''. ($rs->post_type != 'post' ? ' ('.html::escapeHTML($rs->post_type).')' : ''). ' - '.dt::dt2str(__('%Y-%m-%d %H:%M'),$rs->post_dt).'
    • '; } echo '
    '; } } if ($file->type == 'image/jpeg') { echo '

    '.__('Image details').'

    '; $details = ''; if (count($file->media_meta) > 0) { foreach ($file->media_meta as $k => $v) { if ((string) $v) { $details .= '
  • '.$k.': '.html::escapeHTML($v).'
  • '; } } } if ($details) { echo '
      '.$details.'
    '; } else { echo '

    '.__('No detail').'

    '; } } echo '
    '; echo '

    '.__('Updates and modifications').'

    '; if ($file->editable && $core_media_writable) { if ($file->media_type == 'image') { echo '
    '. '

    '.__('Update thumbnails').'

    '. '

    '.__('This will create or update thumbnails for this image.').'

    '. '

    '. $core->adminurl->getHiddenFormFields('admin.media',$page_url_params). $core->formNonce().'

    '. '
    '; } if ($file->type == 'application/zip') { $inflate_combo = array( __('Extract in a new directory') => 'new', __('Extract in current directory') => 'current' ); echo '
    '. '

    '.__('Extract archive').'

    '. '
      '. '
    • '.__('Extract in a new directory').' : '. __('This will extract archive in a new directory that should not exist yet.').'
    • '. '
    • '.__('Extract in current directory').' : '. __('This will extract archive in current directory and will overwrite existing files or directory.').'
    • '. '
    '. '

    '. form::combo('inflate_mode',$inflate_combo,'new'). ''. $core->adminurl->getHiddenFormFields('admin.media',$page_url_params). $core->formNonce().'

    '. '
    '; } echo '
    '. '

    '.__('Change media properties').'

    '. '

    '. form::field('media_file',30,255,html::escapeHTML($file->basename)).'

    '. '

    '. form::field('media_title',30,255,html::escapeHTML($file->media_title)).'

    '. '

    '. form::field('media_dt',16,16,html::escapeHTML($file->media_dtstr)).'

    '. '

    '. '

    '. form::combo('media_path',$dirs_combo,dirname($file->relname)).'

    '. '

    '. $core->adminurl->getHiddenFormFields('admin.media.item',$page_url_params). $core->formNonce().'

    '. '
    '; echo '
    '. '

    '.__('Change file').'

    '. '
    '.form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE).'
    '. '

    '. '

    '. $core->adminurl->getHiddenFormFields('admin.media',$page_url_params). $core->formNonce().'

    '. '
    '; if ($file->del) { echo '
    '. '

    '. form::hidden('remove',rawurlencode($file->basename)). form::hidden('rmyes',1). $core->adminurl->getHiddenFormFields('admin.media',$media_page_url_params). $core->formNonce().'

    '. '
    '; } # --BEHAVIOR-- adminMediaItemForm $core->callBehavior('adminMediaItemForm',$file); } echo '
    '; if ($popup) { echo '
    '; } call_user_func($close_f); dotclear-2.8.0+dfsg/admin/plugin.php000066400000000000000000000041501256530234200173360ustar00rootroot00000000000000plugins->moduleExists($p)) { $p_file = $core->plugins->moduleRoot($p).'/index.php'; } if (file_exists($p_file)) { # Loading plugin $p_info = $core->plugins->getModules($p); $p_name = $p; $p_url = 'plugin.php?p='.$p; $p_title = 'no content - plugin'; $p_head = ''; $p_content = '

    '.__('No content found on this plugin.').'

    '; ob_start(); include $p_file; $res = ob_get_contents(); ob_end_clean(); if (preg_match('|(.*?)(.*?)|ms',$m[1],$mt)) { $p_title = $mt[1]; } if (preg_match_all('|(.*?)|ms',$m[1],$ms)) { foreach ($ms[1] as $v) { $p_head .= $v."\n"; } } if (preg_match_all('|(.*?)|ms',$m[1],$ms)) { foreach ($ms[1] as $v) { $p_head .= $v."\n"; } } if (preg_match_all('|()|ms',$m[1],$ms)) { foreach ($ms[1] as $v) { $p_head .= $v."\n"; } } } if (preg_match('|(.+)|ms',$res,$m)) { $p_content = $m[1]; } call_user_func($open_f,$p_title,$p_head); echo $p_content; call_user_func($close_f); } else { call_user_func($open_f,__('Plugin not found'),'', dcPage::breadcrumb( array( __('System') => '', __('Plugin not found') => '' )) ); echo '

    '.__('The plugin you reached does not exist or does not have an admin page.').'

    '; call_user_func($close_f); } dotclear-2.8.0+dfsg/admin/plugins.php000066400000000000000000000144251256530234200175270ustar00rootroot00000000000000plugins, DC_PLUGINS_ROOT, $core->blog->settings->system->store_plugin_url ); adminModulesList::$allow_multi_install = (boolean) DC_ALLOW_MULTI_MODULES; adminModulesList::$distributed_modules = explode(',', DC_DISTRIB_PLUGINS); if ($core->plugins->disableDepModules($core->adminurl->get('admin.plugins',array()))) { exit; } # -- Display module configuration page -- if ($list->setConfiguration()) { # Get content before page headers include $list->includeConfiguration(); # Gather content $list->getConfiguration(); # Display page dcPage::open(__('Plugins management'), # --BEHAVIOR-- pluginsToolsHeaders $core->callBehavior('pluginsToolsHeaders', $core, true), dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', __('Plugins management') => $list->getURL('',false), ''.__('Plugin configuration').'' => '' )) ); # Display previously gathered content $list->displayConfiguration(); dcPage::helpBlock('core_plugins_conf'); dcPage::close(); # Stop reading code here return; } # -- Execute actions -- try { $list->doActions(); } catch (Exception $e) { $core->error->add($e->getMessage()); } # -- Plugin install -- $plugins_install = null; if (!$core->error->flag()) { $plugins_install = $core->plugins->installModules(); } # -- Page header -- dcPage::open(__('Plugins management'), dcPage::jsLoad('js/_plugins.js'). dcPage::jsPageTabs(). # --BEHAVIOR-- pluginsToolsHeaders $core->callBehavior('pluginsToolsHeaders', $core, false), dcPage::breadcrumb( array( __('System') => '', __('Plugins management') => '' )) ); # -- Plugins install messages -- if (!empty($plugins_install['success'])) { echo '
    '.__('Following plugins have been installed:').'
      '; foreach ($plugins_install['success'] as $k => $v) { echo '
    • '.$k.'
    • '; } echo '
    '; } if (!empty($plugins_install['failure'])) { echo '
    '.__('Following plugins have not been installed:').'
      '; foreach ($plugins_install['failure'] as $k => $v) { echo '
    • '.$k.' ('.$v.')
    • '; } echo '
    '; } # -- Display modules lists -- if ($core->auth->isSuperAdmin()) { # Updated modules from repo $modules = $list->store->get(true); if (!empty($modules)) { echo '
    '. '

    '.html::escapeHTML(__('Update plugins')).'

    '. '

    '.sprintf( __('There is one plugin to update available from repository.', 'There are %s plugins to update available from repository.', count($modules)), count($modules) ).'

    '; $list ->setList('plugin-update') ->setTab('update') ->setModules($modules) ->displayModules( /*cols */ array('checkbox', 'icon', 'name', 'version', 'current_version', 'desc'), /* actions */ array('update') ); echo '

    '.sprintf( __("Visit %s repository, the resources center for Dotclear."), 'Dotaddict' ). '

    '. '
    '; } } echo '
    '; # Activated modules $modules = $list->modules->getModules(); if (!empty($modules)) { echo '

    '.($core->auth->isSuperAdmin() ?__('Activated plugins') : __('Installed plugins')).'

    '. '

    '.__('You can configure and manage installed plugins from this list.').'

    '; $list ->setList('plugin-activate') ->setTab('plugins') ->setModules($modules) ->displayModules( /* cols */ array('expander', 'icon', 'name', 'version', 'desc', 'distrib','deps'), /* actions */ array('deactivate', 'delete', 'behavior') ); } # Deactivated modules if ($core->auth->isSuperAdmin()) { $modules = $list->modules->getDisabledModules(); if (!empty($modules)) { echo '

    '.__('Deactivated plugins').'

    '. '

    '.__('Deactivated plugins are installed but not usable. You can activate them from here.').'

    '; $list ->setList('plugin-deactivate') ->setTab('plugins') ->setModules($modules) ->displayModules( /* cols */ array('expander', 'icon', 'name', 'version', 'desc', 'distrib'), /* actions */ array('activate', 'delete') ); } } echo '
    '; if ($core->auth->isSuperAdmin() && $list->isWritablePath()) { # New modules from repo $search = $list->getSearch(); $modules = $search ? $list->store->search($search) : $list->store->get(); if (!empty($search) || !empty($modules)) { echo '
    '. '

    '.__('Add plugins from repository').'

    '; // '

    '.__('Search and install plugins directly from repository.').'

    '; $list ->setList('plugin-new') ->setTab('new') ->setModules($modules) ->displaySearch() ->displayIndex() ->displayModules( /* cols */ array('expander', 'name', 'score', 'version', 'desc','deps'), /* actions */ array('install'), /* nav limit */ true ); echo '

    '.sprintf( __("Visit %s repository, the resources center for Dotclear."), 'Dotaddict' ). '

    '. '
    '; } # Add a new plugin echo '
    '. '

    '.__('Add plugins from a package').'

    '. '

    '.__('You can install plugins by uploading or downloading zip files.').'

    '; $list->displayManualForm(); echo '
    '; } # --BEHAVIOR-- pluginsToolsTabs $core->callBehavior('pluginsToolsTabs', $core); # -- Notice for super admin -- if ($core->auth->isSuperAdmin() && !$list->isWritablePath()) { echo '

    '.__('Some functions are disabled, please give write access to your plugins directory to enable them.').'

    '; } dcPage::helpBlock('core_plugins'); dcPage::close(); dotclear-2.8.0+dfsg/admin/popup_link.php000066400000000000000000000034411256530234200202220ustar00rootroot00000000000000callBehavior('adminPopupLink', $plugin_id)); echo '

    '.__('Add a link').'

    '; # Languages combo $rs = $core->blog->getLangs(array('order'=>'asc')); $lang_combo = dcAdminCombos::getLangsCombo($rs,true); echo ''. '

    '.__('Cancel').' - '. ''.__('Insert').'

    '."\n". ''."\n"; dcPage::closePopup(); dotclear-2.8.0+dfsg/admin/popup_posts.php000066400000000000000000000046771256530234200204510ustar00rootroot00000000000000getPostTypes(); foreach ($post_types as $k => $v) { $type_combo[__($k)] = (string) $k; } if (!in_array($type, $type_combo)) { $type = null; } $params = array(); $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); $params['no_content'] = true; $params['order'] = 'post_dt DESC'; if ($q) { $params['search'] = $q; } if ($type) { $params['post_type'] = $type; } dcPage::openPopup(__('Add a link to an entry'), dcPage::jsLoad('js/_posts_list.js'). $core->callBehavior('adminPopupPosts', $plugin_id)); echo '

    '.__('Add a link to an entry').'

    '; echo '
    '. '

    '.form::combo('type',$type_combo,$type).''. '

    '. form::hidden('plugin_id',html::escapeHTML($plugin_id)).'

    '. '
    '; echo '
    '. '

    '.form::field('q',30,255,html::escapeHTML($q)). ' '. form::hidden('plugin_id',html::escapeHTML($plugin_id)). form::hidden('type',html::escapeHTML($type)). '

    '; try { $posts = $core->blog->getPosts($params); $counter = $core->blog->getPosts($params,true); $post_list = new adminPostMiniList($core,$posts,$counter->f(0)); } catch (Exception $e) { $core->error->add($e->getMessage()); } echo '
    '; # I know it's not a form but we just need the ID $post_list->display($page,$nb_per_page); echo '
    '; echo '

    '.__('cancel').'

    '; dcPage::closePopup(); dotclear-2.8.0+dfsg/admin/post.php000066400000000000000000000703641256530234200170370ustar00rootroot00000000000000auth->getOption('post_format'); $post_editor = $core->auth->getOption('editor'); $post_password = ''; $post_url = ''; $post_lang = $core->auth->getInfo('user_lang'); $post_title = ''; $post_excerpt = ''; $post_excerpt_xhtml = ''; $post_content = ''; $post_content_xhtml = ''; $post_notes = ''; $post_status = $core->auth->getInfo('user_post_status'); $post_selected = false; $post_open_comment = $core->blog->settings->system->allow_comments; $post_open_tb = $core->blog->settings->system->allow_trackbacks; $page_title = __('New entry'); $can_view_page = true; $can_edit_post = $core->auth->check('usage,contentadmin',$core->blog->id); $can_publish = $core->auth->check('publish,contentadmin',$core->blog->id); $can_delete = false; $post_headlink = ''; $post_link = '%s'; $next_link = $prev_link = $next_headlink = $prev_headlink = null; # If user can't publish if (!$can_publish) { $post_status = -2; } # Getting categories $categories_combo = dcAdminCombos::getCategoriesCombo( $core->blog->getCategories(array('post_type'=>'post')) ); $status_combo = dcAdminCombos::getPostStatusesCombo(); $img_status_pattern = '%1$s'; # Formats combo $core_formaters = $core->getFormaters(); $available_formats = array('' => ''); foreach ($core_formaters as $editor => $formats) { foreach ($formats as $format) { $available_formats[$format] = $format; } } # Languages combo $rs = $core->blog->getLangs(array('order'=>'asc')); $lang_combo = dcAdminCombos::getLangsCombo($rs,true); # Validation flag $bad_dt = false; # Trackbacks $TB = new dcTrackback($core); $tb_urls = $tb_excerpt = ''; # Get entry informations if (!empty($_REQUEST['id'])) { $page_title = __('Edit entry'); $params['post_id'] = $_REQUEST['id']; $post = $core->blog->getPosts($params); if ($post->isEmpty()) { $core->error->add(__('This entry does not exist.')); $can_view_page = false; } else { $post_id = $post->post_id; $cat_id = $post->cat_id; $post_dt = date('Y-m-d H:i',strtotime($post->post_dt)); $post_format = $post->post_format; $post_password = $post->post_password; $post_url = $post->post_url; $post_lang = $post->post_lang; $post_title = $post->post_title; $post_excerpt = $post->post_excerpt; $post_excerpt_xhtml = $post->post_excerpt_xhtml; $post_content = $post->post_content; $post_content_xhtml = $post->post_content_xhtml; $post_notes = $post->post_notes; $post_status = $post->post_status; $post_selected = (boolean) $post->post_selected; $post_open_comment = (boolean) $post->post_open_comment; $post_open_tb = (boolean) $post->post_open_tb; $can_edit_post = $post->isEditable(); $can_delete= $post->isDeletable(); $next_rs = $core->blog->getNextPost($post,1); $prev_rs = $core->blog->getNextPost($post,-1); if ($next_rs !== null) { $next_link = sprintf($post_link,$next_rs->post_id, html::escapeHTML($next_rs->post_title),__('Next entry').' »'); $next_headlink = sprintf($post_headlink,'next', html::escapeHTML($next_rs->post_title),$next_rs->post_id); } if ($prev_rs !== null) { $prev_link = sprintf($post_link,$prev_rs->post_id, html::escapeHTML($prev_rs->post_title),'« '.__('Previous entry')); $prev_headlink = sprintf($post_headlink,'previous', html::escapeHTML($prev_rs->post_title),$prev_rs->post_id); } try { $core->media = new dcMedia($core); } catch (Exception $e) { $core->error->add($e->getMessage()); } # Sanitize trackbacks excerpt $tb_excerpt = empty($_POST['tb_excerpt']) ? $post_excerpt_xhtml.' '.$post_content_xhtml : $_POST['tb_excerpt']; $tb_excerpt = html::decodeEntities(html::clean($tb_excerpt)); $tb_excerpt = text::cutString(html::escapeHTML($tb_excerpt), 255); $tb_excerpt = preg_replace('/\s+/ms', ' ', $tb_excerpt); } } if (isset($_REQUEST['section']) && $_REQUEST['section']=='trackbacks') { $anchor = 'trackbacks'; } else { $anchor = 'comments'; } $comments_actions_page = new dcCommentsActionsPage($core,$core->adminurl->get('admin.post'),array('id' => $post_id, '_ANCHOR'=>$anchor,'section' => $anchor)); if ($comments_actions_page->process()) { return; } # Ping blogs if (!empty($_POST['ping'])) { if (!empty($_POST['tb_urls']) && $post_id && $post_status == 1 && $can_edit_post) { $tb_urls = $_POST['tb_urls']; $tb_urls = str_replace("\r", '', $tb_urls); $tb_post_title = html::escapeHTML(trim(html::clean($post_title))); $tb_post_url = $post->getURL(); foreach (explode("\n", $tb_urls) as $tb_url) { try { $TB->ping($tb_url, $post_id, $tb_post_title, $tb_excerpt, $tb_post_url); } catch (Exception $e) { $core->error->add($e->getMessage()); } } if (!$core->error->flag()) { dcPage::addSuccessNotice(__('All pings sent.')); $core->adminurl->redirect( 'admin.post', array('id' => $post_id, 'tb'=> '1') ); } } } # Format excerpt and content elseif (!empty($_POST) && $can_edit_post) { $post_format = $_POST['post_format']; $post_excerpt = $_POST['post_excerpt']; $post_content = $_POST['post_content']; $post_title = $_POST['post_title']; $cat_id = (integer) $_POST['cat_id']; if (isset($_POST['post_status'])) { $post_status = (integer) $_POST['post_status']; } if (empty($_POST['post_dt'])) { $post_dt = ''; } else { try { $post_dt = strtotime($_POST['post_dt']); if ($post_dt == false || $post_dt == -1) { $bad_dt = true; throw new Exception(__('Invalid publication date')); } $post_dt = date('Y-m-d H:i',$post_dt); } catch (Exception $e) { $core->error->add($e->getMessage()); } } $post_open_comment = !empty($_POST['post_open_comment']); $post_open_tb = !empty($_POST['post_open_tb']); $post_selected = !empty($_POST['post_selected']); $post_lang = $_POST['post_lang']; $post_password = !empty($_POST['post_password']) ? $_POST['post_password'] : null; $post_notes = $_POST['post_notes']; if (isset($_POST['post_url'])) { $post_url = $_POST['post_url']; } $core->blog->setPostContent( $post_id,$post_format,$post_lang, $post_excerpt,$post_excerpt_xhtml,$post_content,$post_content_xhtml ); } # Delete post if (!empty($_POST['delete']) && $can_delete) { try { # --BEHAVIOR-- adminBeforePostDelete $core->callBehavior('adminBeforePostDelete',$post_id); $core->blog->delPost($post_id); $core->adminurl->redirect("admin.posts"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Create or update post if (!empty($_POST) && !empty($_POST['save']) && $can_edit_post && !$bad_dt) { # Create category if (!empty($_POST['new_cat_title']) && $core->auth->check('categories', $core->blog->id)) { $cur_cat = $core->con->openCursor($core->prefix.'category'); $cur_cat->cat_title = $_POST['new_cat_title']; $cur_cat->cat_url = ''; $parent_cat = !empty($_POST['new_cat_parent']) ? $_POST['new_cat_parent'] : ''; # --BEHAVIOR-- adminBeforeCategoryCreate $core->callBehavior('adminBeforeCategoryCreate', $cur_cat); $cat_id = $core->blog->addCategory($cur_cat, (integer) $parent_cat); # --BEHAVIOR-- adminAfterCategoryCreate $core->callBehavior('adminAfterCategoryCreate', $cur_cat, $cat_id); } $cur = $core->con->openCursor($core->prefix.'post'); $cur->post_title = $post_title; $cur->cat_id = ($cat_id ? $cat_id : null); $cur->post_dt = $post_dt ? date('Y-m-d H:i:00',strtotime($post_dt)) : ''; $cur->post_format = $post_format; $cur->post_password = $post_password; $cur->post_lang = $post_lang; $cur->post_title = $post_title; $cur->post_excerpt = $post_excerpt; $cur->post_excerpt_xhtml = $post_excerpt_xhtml; $cur->post_content = $post_content; $cur->post_content_xhtml = $post_content_xhtml; $cur->post_notes = $post_notes; $cur->post_status = $post_status; $cur->post_selected = (integer) $post_selected; $cur->post_open_comment = (integer) $post_open_comment; $cur->post_open_tb = (integer) $post_open_tb; if (isset($_POST['post_url'])) { $cur->post_url = $post_url; } # Update post if ($post_id) { try { # --BEHAVIOR-- adminBeforePostUpdate $core->callBehavior('adminBeforePostUpdate',$cur,$post_id); $core->blog->updPost($post_id,$cur); # --BEHAVIOR-- adminAfterPostUpdate $core->callBehavior('adminAfterPostUpdate',$cur,$post_id); dcPage::addSuccessNotice (sprintf(__('The post "%s" has been successfully updated'),html::escapeHTML($cur->post_title))); $core->adminurl->redirect( 'admin.post', array('id' => $post_id) ); } catch (Exception $e) { $core->error->add($e->getMessage()); } } else { $cur->user_id = $core->auth->userID(); try { # --BEHAVIOR-- adminBeforePostCreate $core->callBehavior('adminBeforePostCreate',$cur); $return_id = $core->blog->addPost($cur); # --BEHAVIOR-- adminAfterPostCreate $core->callBehavior('adminAfterPostCreate',$cur,$return_id); dcPage::addSuccessNotice(__('Entry has been successfully created.')); $core->adminurl->redirect( 'admin.post', array('id' => $return_id) ); } catch (Exception $e) { $core->error->add($e->getMessage()); } } } # Getting categories $categories_combo = dcAdminCombos::getCategoriesCombo( $core->blog->getCategories(array('post_type'=>'post')) ); /* DISPLAY -------------------------------------------------------- */ $default_tab = 'edit-entry'; if (!$can_edit_post) { $default_tab = ''; } if (!empty($_GET['co'])) { $default_tab = 'comments'; } elseif (!empty($_GET['tb'])) { $default_tab = 'trackbacks'; } if ($post_id) { switch ($post_status) { case 1: $img_status = sprintf($img_status_pattern,__('Published'),'check-on.png'); break; case 0: $img_status = sprintf($img_status_pattern,__('Unpublished'),'check-off.png'); break; case -1: $img_status = sprintf($img_status_pattern,__('Scheduled'),'scheduled.png'); break; case -2: $img_status = sprintf($img_status_pattern,__('Pending'),'check-wrn.png'); break; default: $img_status = ''; } $edit_entry_str = __('“%s”'); $page_title_edit = sprintf($edit_entry_str, html::escapeHTML($post_title)).' '.$img_status; } else { $img_status = ''; } $admin_post_behavior = ''; if ($post_editor) { $p_edit = $c_edit = ''; if (!empty($post_editor[$post_format])) { $p_edit = $post_editor[$post_format]; } if (!empty($post_editor['xhtml'])) { $c_edit = $post_editor['xhtml']; } if ($p_edit == $c_edit) { $admin_post_behavior .= $core->callBehavior('adminPostEditor', $p_edit,'post',array('#post_excerpt','#post_content','#comment_content'),$post_format); } else { $admin_post_behavior .= $core->callBehavior('adminPostEditor', $p_edit,'post',array('#post_excerpt','#post_content'),$post_format); $admin_post_behavior .= $core->callBehavior('adminPostEditor', $c_edit,'comment',array('#comment_content'),'xhtml'); } } dcPage::open($page_title.' - '.__('Entries'), dcPage::jsDatePicker(). dcPage::jsModal(). dcPage::jsMetaEditor(). $admin_post_behavior. dcPage::jsLoad('js/_post.js'). dcPage::jsConfirmClose('entry-form','comment-form'). # --BEHAVIOR-- adminPostHeaders $core->callBehavior('adminPostHeaders'). dcPage::jsPageTabs($default_tab). $next_headlink."\n".$prev_headlink, dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', __('Entries') => $core->adminurl->get("admin.posts"), ($post_id ? $page_title_edit : $page_title) => '' )) , array( 'x-frame-allow' => $core->blog->url ) ); if (!empty($_GET['upd'])) { dcPage::success(__('Entry has been successfully updated.')); } elseif (!empty($_GET['crea'])) { dcPage::success(__('Entry has been successfully created.')); } elseif (!empty($_GET['attached'])) { dcPage::success(__('File has been successfully attached.')); } elseif (!empty($_GET['rmattach'])) { dcPage::success(__('Attachment has been successfully removed.')); } if (!empty($_GET['creaco'])) { dcPage::success(__('Comment has been successfully created.')); } if (!empty($_GET['tbsent'])) { dcPage::success(__('All pings sent.')); } # XHTML conversion if (!empty($_GET['xconv'])) { $post_excerpt = $post_excerpt_xhtml; $post_content = $post_content_xhtml; $post_format = 'xhtml'; dcPage::message(__('Don\'t forget to validate your XHTML conversion by saving your post.')); } if ($post_id && $post->post_status == 1) { echo '

    '.__('Go to this entry on the site').'

    '; } if ($post_id) { echo ''; } # Exit if we cannot view page if (!$can_view_page) { dcPage::helpBlock('core_post'); dcPage::close(); exit; } /* Post form if we can edit post -------------------------------------------------------- */ if ($can_edit_post) { $sidebar_items = new ArrayObject(array( 'status-box' => array( 'title' => __('Status'), 'items' => array( 'post_status' => '

    '. form::combo('post_status',$status_combo,$post_status,'maximal','',!$can_publish). '

    ', 'post_dt' => '

    '. form::field('post_dt',16,16,$post_dt,($bad_dt ? 'invalid' : '')). '

    ', 'post_lang' => '

    '. form::combo('post_lang',$lang_combo,$post_lang). '

    ', 'post_format' => '
    '. '
    '. '

    '.form::combo('post_format',$available_formats,$post_format,'maximal').'

    '. '

    '. ''. __('Convert to XHTML').'

    ')), 'metas-box' => array( 'title' => __('Filing'), 'items' => array( 'post_selected' => '

    ', 'cat_id' => '
    '. '
    '.__('Category').'
    '. '

    '. form::combo('cat_id',$categories_combo,$cat_id,'maximal'). '

    '. ($core->auth->check('categories', $core->blog->id) ? '
    '. '
    '.__('Add a new category').'
    '. '

    '. '

    '. '
    ' : ''). '
    ')), 'options-box' => array( 'title' => __('Options'), 'items' => array( 'post_open_comment_tb' => '
    '. '
    '.__('Comments and trackbacks list').'
    '. '

    '. ($core->blog->settings->system->allow_comments ? (isContributionAllowed($post_id,strtotime($post_dt),true) ? '' : '

    '. __('Warning: Comments are not more accepted for this entry.').'

    ') : '

    '. __('Comments are not accepted on this blog so far.').'

    '). '

    '. ($core->blog->settings->system->allow_trackbacks ? (isContributionAllowed($post_id,strtotime($post_dt),false) ? '' : '

    '. __('Warning: Trackbacks are not more accepted for this entry.').'

    ') : '

    '.__('Trackbacks are not accepted on this blog so far.').'

    '). '
    ', 'post_password' => '

    '. form::field('post_password',10,32,html::escapeHTML($post_password),'maximal'). '

    ', 'post_url' => '
    '. '

    '. form::field('post_url',10,255,html::escapeHTML($post_url),'maximal'). '

    '. '

    '. __('Warning: If you set the URL manually, it may conflict with another entry.'). '

    ' )))); $main_items = new ArrayObject(array( "post_title" => '

    '. ''. form::field('post_title',20,255,html::escapeHTML($post_title),'maximal'). '

    ', "post_excerpt" => '

    '. form::textarea('post_excerpt',50,5,html::escapeHTML($post_excerpt)). '

    ', "post_content" => '

    '. form::textarea('post_content',50,$core->auth->getOption('edit_size'),html::escapeHTML($post_content)). '

    ', "post_notes" => '

    '. form::textarea('post_notes',50,5,html::escapeHTML($post_notes)). '

    ' ) ); # --BEHAVIOR-- adminPostFormItems $core->callBehavior('adminPostFormItems',$main_items,$sidebar_items, isset($post) ? $post : null); echo '
    '; echo '
    '; echo '
    '; echo '
    '; echo '

    '.__('Edit post').'

    '; foreach ($main_items as $id => $item) { echo $item; } # --BEHAVIOR-- adminPostForm (may be deprecated) $core->callBehavior('adminPostForm',isset($post) ? $post : null); echo '

    '. ($post_id ? form::hidden('id',$post_id) : ''). ' '; if ($post_id) { $preview_url = $core->blog->url.$core->url->getURLFor('preview',$core->auth->userID().'/'. http::browserUID(DC_MASTER_KEY.$core->auth->userID().$core->auth->getInfo('user_pwd')). '/'.$post->post_url); echo ''.__('Preview').' (p)'.' '; } else { echo ''.__('Cancel').' (c)'; } echo ($can_delete ? '' : ''). $core->formNonce(). '

    '; echo '
    '; // End #entry-content echo '
    '; // End #entry-wrapper echo ''; // End #entry-sidebar echo '
    '; # --BEHAVIOR-- adminPostForm $core->callBehavior('adminPostAfterForm',isset($post) ? $post : null); echo '
    '; } if ($post_id) { /* Comments -------------------------------------------------------- */ $params = array('post_id' => $post_id, 'order' => 'comment_dt ASC'); $comments = $core->blog->getComments(array_merge($params,array('comment_trackback'=>0))); echo '
    '; $combo_action = $comments_actions_page->getCombo(); $has_action = !empty($combo_action) && !$comments->isEmpty(); echo '

    '.__('Add a comment').'

    '; if ($has_action) { echo '
    '; } echo '

    '.__('Comments').'

    '; if (!$comments->isEmpty()) { showComments($comments,$has_action); } else { echo '

    '.__('No comments').'

    '; } if ($has_action) { echo '
    '. '

    '. '

    '. form::combo('action',$combo_action). form::hidden(array('section'),'comments'). form::hidden(array('id'),$post_id). $core->formNonce(). '

    '. '
    '. '
    '; } /* Add a comment -------------------------------------------------------- */ echo '
    '. '

    '.__('Add a comment').'

    '. '
    '. '
    '. '

    '. form::field('comment_author',30,255,html::escapeHTML($core->auth->getInfo('user_cn'))). '

    '. '

    '. form::field('comment_email',30,255,html::escapeHTML($core->auth->getInfo('user_email'))). '

    '. '

    '. form::field('comment_site',30,255,html::escapeHTML($core->auth->getInfo('user_url'))). '

    '. '

    '. form::textarea('comment_content',50,8,html::escapeHTML('')). '

    '. '

    '. form::hidden('post_id',$post_id). $core->formNonce(). '

    '. '
    '. #constrained '
    '. '
    '. #add comment '
    '; #comments } if ($post_id && $post_status == 1) { /* Trackbacks -------------------------------------------------------- */ $params = array('post_id' => $post_id, 'order' => 'comment_dt ASC'); $trackbacks = $core->blog->getComments(array_merge($params, array('comment_trackback' => 1))); # Actions combo box $combo_action = $comments_actions_page->getCombo(); $has_action = !empty($combo_action) && !$trackbacks->isEmpty(); if (!empty($_GET['tb_auto'])) { $tb_urls = implode("\n", $TB->discover($post_excerpt_xhtml.' '.$post_content_xhtml)); } # Display tab echo '
    '; # tracbacks actions if ($has_action) { echo '
    '; } echo '

    '.__('Trackbacks received').'

    '; if (!$trackbacks->isEmpty()) { showComments($trackbacks, $has_action, true); } else { echo '

    '.__('No trackback').'

    '; } if ($has_action) { echo '
    '. '

    '. '

    '. form::combo('action', $combo_action). form::hidden('id',$post_id). form::hidden(array('section'),'trackbacks'). $core->formNonce(). '

    '. '
    '. '
    '; } /* Add trackbacks -------------------------------------------------------- */ if ($can_edit_post && $post->post_status) { echo '
    '; echo '

    '.__('Ping blogs').'

    '. '
    $post_id)).'" id="trackback-form" method="post">'. '

    '. form::textarea('tb_urls', 60, 5, $tb_urls). '

    '. '

    '. form::textarea('tb_excerpt', 60, 5, $tb_excerpt).'

    '. '

    '. $core->formNonce(). ''. (empty($_GET['tb_auto']) ? '   $post_id,'tb_auto' => 1,'tb' => 1)). '">'.__('Auto discover ping URLs').'' : ''). '

    '. '
    '; $pings = $TB->getPostPings($post_id); if (!$pings->isEmpty()) { echo '

    '.__('Previously sent pings').'

    '; echo '
      '; while ($pings->fetch()) { echo '
    • '.dt::dt2str(__('%Y-%m-%d %H:%M'), $pings->ping_dt).' - '. $pings->ping_url.'
    • '; } echo '
    '; } echo '
    '; } echo '
    '; #trackbacks } # Controls comments or trakbacks capabilities function isContributionAllowed($id,$dt,$com=true) { global $core; if (!$id) { return true; } if ($com) { if (($core->blog->settings->system->comments_ttl == 0) || (time() - $core->blog->settings->system->comments_ttl*86400 < $dt)) { return true; } } else { if (($core->blog->settings->system->trackbacks_ttl == 0) || (time() - $core->blog->settings->system->trackbacks_ttl*86400 < $dt)) { return true; } } return false; } # Show comments or trackbacks function showComments($rs,$has_action,$tb=false) { global $core; echo '
    '. ''. ''. ''. ''. ''. ''. ''; $comments = array(); if (isset($_REQUEST['comments'])) { foreach ($_REQUEST['comments'] as $v) { $comments[(integer)$v]=true; } } while($rs->fetch()) { $comment_url = $core->adminurl->get("admin.comment",array('id' => $rs->comment_id)); $img = '%1$s'; switch ($rs->comment_status) { case 1: $img_status = sprintf($img,__('Published'),'check-on.png'); break; case 0: $img_status = sprintf($img,__('Unpublished'),'check-off.png'); break; case -1: $img_status = sprintf($img,__('Pending'),'check-wrn.png'); break; case -2: $img_status = sprintf($img,__('Junk'),'junk.png'); break; } echo ''. ''. ''. ''. ''. ''. ''. ''; } echo '
    '.__('Author').''.__('Date').''.__('IP address').''.__('Status').''.__('Edit').'
    '. ($has_action ? form::checkbox(array('comments[]'),$rs->comment_id,isset($comments[$rs->comment_id]),'','',0,'title="'.($tb ? __('select this trackback') : __('select this comment')).'"') : '').''.html::escapeHTML($rs->comment_author).''.dt::dt2str(__('%Y-%m-%d %H:%M'),$rs->comment_dt).' $rs->comment_ip)).'">'.$rs->comment_ip.''.$img_status.''. ' '.__('Edit').'
    '; } dcPage::helpBlock('core_post','core_trackbacks','core_wiki'); dcPage::close(); dotclear-2.8.0+dfsg/admin/post_media.php000066400000000000000000000051041256530234200201640ustar00rootroot00000000000000blog->getPosts(array('post_id' => $post_id,'post_type'=>'')); if ($rs->isEmpty()) { exit; } try { if ($post_id && $media_id && !empty($_REQUEST['attach'])) { $core->media = new dcMedia($core); $core->media->addPostMedia($post_id,$media_id); if (!empty($_SERVER['HTTP_X_REQUESTED_WITH'])) { header('Content-type: application/json'); echo json_encode(array('url' => $core->getPostAdminURL($rs->post_type,$post_id,false))); exit(); } else { http::redirect($core->getPostAdminURL($rs->post_type,$post_id,false)); } } $core->media = new dcMedia($core); $f = $core->media->getPostMedia($post_id,$media_id); if (empty($f)) { $post_id = $media_id = null; throw new Exception(__('This attachment does not exist')); } $f = $f[0]; } catch (Exception $e) { $core->error->add($e->getMessage()); } # Remove a media from en if (($post_id && $media_id) || $core->error->flag()) { if (!empty($_POST['remove'])) { $core->media->removePostMedia($post_id,$media_id); dcPage::addSuccessNotice(__('Attachment has been successfully removed.')); http::redirect($core->getPostAdminURL($rs->post_type,$post_id,false)); } elseif (isset($_POST['post_id'])) { http::redirect($core->getPostAdminURL($rs->post_type,$post_id,false)); } if (!empty($_GET['remove'])) { dcPage::open(__('Remove attachment')); echo '

    '.__('Attachment').' › '.__('confirm removal').'

    '; echo '
    '. '

    '.__('Are you sure you want to remove this attachment?').'

    '. '

    '. '   '. form::hidden('post_id',$post_id). form::hidden('media_id',$media_id). $core->formNonce().'

    '. '
    '; dcPage::close(); exit; } } dotclear-2.8.0+dfsg/admin/posts.php000066400000000000000000000244241256530234200172160ustar00rootroot00000000000000blog->getCategories(array('post_type'=>'post')); } catch (Exception $e) { $core->error->add($e->getMessage()); } # Getting authors try { $users = $core->blog->getPostsUsers(); } catch (Exception $e) { $core->error->add($e->getMessage()); } # Getting dates try { $dates = $core->blog->getDates(array('type'=>'month')); } catch (Exception $e) { $core->error->add($e->getMessage()); } # Getting langs try { $langs = $core->blog->getLangs(); } catch (Exception $e) { $core->error->add($e->getMessage()); } # Creating filter combo boxes if (!$core->error->flag()) { # Filter form we'll put in html_block $users_combo = array_merge( array('-' => ''), dcAdminCombos::getUsersCombo($users) ); $categories_combo = array_merge( array( new formSelectOption('-',''), new formSelectOption(__('(No cat)'),'NULL')), dcAdminCombos::getCategoriesCombo($categories,false) ); $categories_values = array(); foreach ($categories_combo as $cat) { if (isset($cat->value)) { $categories_values[$cat->value]=true; } } $status_combo = array_merge( array('-' => ''), dcAdminCombos::getPostStatusesCombo() ); $selected_combo = array( '-' => '', __('Selected') => '1', __('Not selected') => '0' ); $attachment_combo = array( '-' => '', __('With attachments') => '1', __('Without attachments') => '0' ); $password_combo = array( '-' => '', __('With password') => '1', __('Without password') => '0' ); # Months array $dt_m_combo = array_merge( array('-' => ''), dcAdminCombos::getDatesCombo($dates) ); $lang_combo = array_merge( array('-' => ''), dcAdminCombos::getLangsCombo($langs,false) ); # Post formats $core_formaters = $core->getFormaters(); $available_formats = array(); foreach ($core_formaters as $editor => $formats) { foreach ($formats as $format) { $available_formats[$format] = $format; } } $format_combo = array_merge( array('-' => ''), $available_formats ); $sortby_combo = array( __('Date') => 'post_dt', __('Title') => 'post_title', __('Category') => 'cat_title', __('Author') => 'user_id', __('Status') => 'post_status', __('Selected') => 'post_selected', __('Number of comments') => 'nb_comment', __('Number of trackbacks') => 'nb_trackback' ); $order_combo = array( __('Descending') => 'desc', __('Ascending') => 'asc' ); } # Actions combo box $posts_actions_page = new dcPostsActionsPage($core,$core->adminurl->get("admin.posts")); if ($posts_actions_page->process()) { return; } /* Get posts -------------------------------------------------------- */ $user_id = !empty($_GET['user_id']) ? $_GET['user_id'] : ''; $cat_id = !empty($_GET['cat_id']) ? $_GET['cat_id'] : ''; $status = isset($_GET['status']) ? $_GET['status'] : ''; $password = isset($_GET['password']) ? $_GET['password'] : ''; $selected = isset($_GET['selected']) ? $_GET['selected'] : ''; $attachment = isset($_GET['attachment']) ? $_GET['attachment'] : ''; $month = !empty($_GET['month']) ? $_GET['month'] : ''; $lang = !empty($_GET['lang']) ? $_GET['lang'] : ''; $format = !empty($_GET['format']) ? $_GET['format'] : ''; $sortby = !empty($_GET['sortby']) ? $_GET['sortby'] : 'post_dt'; $order = !empty($_GET['order']) ? $_GET['order'] : 'desc'; $show_filters = false; $page = !empty($_GET['page']) ? max(1,(integer) $_GET['page']) : 1; $nb_per_page = 30; if (!empty($_GET['nb']) && (integer) $_GET['nb'] > 0) { if ($nb_per_page != $_GET['nb']) { $show_filters = true; } $nb_per_page = (integer) $_GET['nb']; } $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); $params['no_content'] = true; $params['where'] = ''; # - User filter if ($user_id !== '' && in_array($user_id,$users_combo)) { $params['user_id'] = $user_id; $show_filters = true; } else { $user_id=''; } # - Categories filter if ($cat_id !== '' && isset($categories_values[$cat_id])) { $params['cat_id'] = $cat_id; $show_filters = true; } else { $cat_id=''; } # - Status filter if ($status !== '' && in_array($status,$status_combo)) { $params['post_status'] = $status; $show_filters = true; } else { $status=''; } # - Password filter if ($password !== '' && in_array($password,$password_combo)) { $params['where'] .= ' AND post_password IS '.($password ? 'NOT ' : '').'NULL '; $show_filters = true; } else { $password=''; } # - Selected filter if ($selected !== '' && in_array($selected,$selected_combo)) { $params['post_selected'] = $selected; $show_filters = true; } else { $selected=''; } # - Attachment filter if ($attachment !== '' && in_array($attachment,$attachment_combo)) { $params['media'] = $attachment; $params['link_type'] = 'attachment'; $show_filters = true; } else { $attachment=''; } # - Month filter if ($month !== '' && in_array($month,$dt_m_combo)) { $params['post_month'] = substr($month,4,2); $params['post_year'] = substr($month,0,4); $show_filters = true; } else { $month=''; } # - Lang filter if ($lang !== '' && in_array($lang,$lang_combo)) { $params['post_lang'] = $lang; $show_filters = true; } else { $lang=''; } # - Format filter if ($format !== '' && in_array($format,$format_combo)) { $params['where'] .= " AND post_format = '".$format."' "; $show_filters = true; } else { $format=''; } # - Sortby and order filter if ($sortby !== '' && in_array($sortby,$sortby_combo)) { if ($order !== '' && in_array($order,$order_combo)) { $params['order'] = $sortby.' '.$order; } else { $order='desc'; } if ($sortby != 'post_dt' || $order != 'desc') { $show_filters = true; } } else { $sortby='post_dt'; $order='desc'; } # Get posts try { $posts = $core->blog->getPosts($params); $counter = $core->blog->getPosts($params,true); $post_list = new adminPostList($core,$posts,$counter->f(0)); } catch (Exception $e) { $core->error->add($e->getMessage()); } /* DISPLAY -------------------------------------------------------- */ $form_filter_title = __('Show filters and display options'); $starting_script = dcPage::jsLoad('js/_posts_list.js'); $starting_script .= dcPage::jsLoad('js/filter-controls.js'); $starting_script .= '"; dcPage::open(__('Entries'),$starting_script, dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', __('Entries') => '' )) ); if (!empty($_GET['upd'])) { dcPage::success(__('Selected entries have been successfully updated.')); } elseif (!empty($_GET['del'])) { dcPage::success(__('Selected entries have been successfully deleted.')); } if (!$core->error->flag()) { echo '

    '.__('New entry').'

    '. '
    '. '

    '.$form_filter_title.'

    '. '
    '. '
    '. '

    '.__('Filters').'

    '. '

    '. form::combo('user_id',$users_combo,$user_id).'

    '. '

    '. form::combo('cat_id',$categories_combo,$cat_id).'

    '. '

    ' . form::combo('status',$status_combo,$status).'

    '. '

    '. form::combo('format',$format_combo,$format).'

    '. '

    '. form::combo('password',$password_combo,$password).'

    '. '
    '. '
    '. '

    '. form::combo('selected',$selected_combo,$selected).'

    '. '

    '. form::combo('attachment',$attachment_combo,$attachment).'

    '. '

    '. form::combo('month',$dt_m_combo,$month).'

    '. '

    '. form::combo('lang',$lang_combo,$lang).'

    '. '
    '. '
    '. '

    '.__('Display options').'

    '. '

    '. form::combo('sortby',$sortby_combo,$sortby).'

    '. '

    '. form::combo('order',$order_combo,$order).'

    '. '

    '.__('Show').'

    '. '
    '. '
    '. '

    '. '

    '. //Opera sucks '
    '; # Show posts $post_list->display($page,$nb_per_page, '
    '. '%s'. '
    '. '

    '. '

    '. form::combo('action',$posts_actions_page->getCombo()). '

    '. form::hidden(array('user_id'),$user_id). form::hidden(array('cat_id'),$cat_id). form::hidden(array('status'),$status). form::hidden(array('password'),$password). form::hidden(array('selected'),$selected). form::hidden(array('attachment'),$attachment). form::hidden(array('month'),$month). form::hidden(array('lang'),$lang). form::hidden(array('sortby'),$sortby). form::hidden(array('order'),$order). form::hidden(array('page'),$page). form::hidden(array('nb'),$nb_per_page). $core->formNonce(). '
    '. '
    ', $show_filters ); } dcPage::helpBlock('core_posts'); dcPage::close(); dotclear-2.8.0+dfsg/admin/posts_actions.php000066400000000000000000000016761256530234200207420ustar00rootroot00000000000000adminurl->get("admin.posts"); $args=array(); } $posts_actions_page = new dcPostsActionsPage($core,$uri,$args); $posts_actions_page->setEnableRedirSelection(false); $posts_actions_page->process(); dotclear-2.8.0+dfsg/admin/preferences.php000066400000000000000000000537711256530234200203560ustar00rootroot00000000000000auth->getInfo('user_name'); $user_firstname = $core->auth->getInfo('user_firstname'); $user_displayname = $core->auth->getInfo('user_displayname'); $user_email = $core->auth->getInfo('user_email'); $user_url = $core->auth->getInfo('user_url'); $user_lang = $core->auth->getInfo('user_lang'); $user_tz = $core->auth->getInfo('user_tz'); $user_post_status = $core->auth->getInfo('user_post_status'); $user_options = $core->auth->getOptions(); if (empty($user_options['editor']) || !is_array($user_options['editor'])) { $user_options['editor'] = array(); } $core->auth->user_prefs->addWorkspace('dashboard'); $user_dm_doclinks = $core->auth->user_prefs->dashboard->doclinks; $user_dm_dcnews = $core->auth->user_prefs->dashboard->dcnews; $user_dm_quickentry = $core->auth->user_prefs->dashboard->quickentry; $core->auth->user_prefs->addWorkspace('accessibility'); $user_acc_nodragdrop = $core->auth->user_prefs->accessibility->nodragdrop; $core->auth->user_prefs->addWorkspace('interface'); $user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader; if ($core->auth->isSuperAdmin()) { $user_ui_hide_std_favicon = $core->auth->user_prefs->interface->hide_std_favicon; } $user_ui_iconset = @$core->auth->user_prefs->interface->iconset; $user_ui_nofavmenu = $core->auth->user_prefs->interface->nofavmenu; $user_ui_media_by_page = ($core->auth->user_prefs->interface->media_by_page ? $core->auth->user_prefs->interface->media_by_page : 30); $default_tab = !empty($_GET['tab']) ? html::escapeHTML($_GET['tab']) : 'user-profile'; if (!empty($_GET['append']) || !empty($_GET['removed']) || !empty($_GET['neworder']) || !empty($_GET['replaced']) || !empty($_POST['appendaction']) || !empty($_POST['removeaction']) || !empty($_GET['db-updated'])) { $default_tab = 'user-favorites'; } elseif (!empty($_GET['updated'])) { $default_tab = 'user-options'; } if (($default_tab != 'user-profile') && ($default_tab != 'user-options') && ($default_tab != 'user-favorites')) { $default_tab = 'user-profile'; } # Editors combo $editors_combo = dcAdminCombos::getEditorsCombo(); $editors = array_keys($editors_combo); # Format by editors $formaters = $core->getFormaters(); $format_by_editors = array(); foreach ($formaters as $editor => $formats) { foreach ($formats as $format) { $format_by_editors[$format][$editor] = $editor; } } $available_formats = array('' => ''); foreach (array_keys($format_by_editors) as $format) { $available_formats[$format] = $format; if (!isset($user_options['editor'][$format])) { $user_options['editor'][$format] = ''; } } $status_combo = dcAdminCombos::getPostStatusescombo(); $iconsets_combo = array(__('Default') => ''); $iconsets_root = dirname(__FILE__).'/images/iconset/'; if (is_dir($iconsets_root) && is_readable($iconsets_root)) { if (($d = @dir($iconsets_root)) !== false) { while (($entry = $d->read()) !== false) { if ($entry != '.' && $entry != '..' && substr($entry, 0, 1) != '.' && is_dir($iconsets_root.'/'.$entry)) { $iconsets_combo[$entry] = $entry; } } } } # Language codes $lang_combo = dcAdminCombos::getAdminLangsCombo(); # Add or update user if (isset($_POST['user_name'])) { try { $pwd_check = !empty($_POST['cur_pwd']) && $core->auth->checkPassword($core->auth->crypt($_POST['cur_pwd'])); if ($core->auth->allowPassChange() && !$pwd_check && $user_email != $_POST['user_email']) { throw new Exception(__('If you want to change your email or password you must provide your current password.')); } $cur = $core->con->openCursor($core->prefix.'user'); $cur->user_name = $user_name = $_POST['user_name']; $cur->user_firstname = $user_firstname = $_POST['user_firstname']; $cur->user_displayname = $user_displayname = $_POST['user_displayname']; $cur->user_email = $user_email = $_POST['user_email']; $cur->user_url = $user_url = $_POST['user_url']; $cur->user_lang = $user_lang = $_POST['user_lang']; $cur->user_tz = $user_tz = $_POST['user_tz']; $cur->user_options = new ArrayObject($user_options); if ($core->auth->allowPassChange() && !empty($_POST['new_pwd'])) { if (!$pwd_check) { throw new Exception(__('If you want to change your email or password you must provide your current password.')); } if ($_POST['new_pwd'] != $_POST['new_pwd_c']) { throw new Exception(__("Passwords don't match")); } $cur->user_pwd = $_POST['new_pwd']; } # --BEHAVIOR-- adminBeforeUserUpdate $core->callBehavior('adminBeforeUserProfileUpdate',$cur,$core->auth->userID()); # Udate user $core->updUser($core->auth->userID(),$cur); # --BEHAVIOR-- adminAfterUserUpdate $core->callBehavior('adminAfterUserProfileUpdate',$cur,$core->auth->userID()); dcPage::addSuccessNotice(__('Personal information has been successfully updated.')); $core->adminurl->redirect("admin.user.preferences"); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Update user options if (isset($_POST['user_editor'])) { try { $cur = $core->con->openCursor($core->prefix.'user'); $cur->user_name = $user_name; $cur->user_firstname = $user_firstname; $cur->user_displayname = $user_displayname; $cur->user_email = $user_email; $cur->user_url = $user_url; $cur->user_lang = $user_lang; $cur->user_tz = $user_tz; $cur->user_post_status = $user_post_status = $_POST['user_post_status']; $user_options['edit_size'] = (integer) $_POST['user_edit_size']; if ($user_options['edit_size'] < 1) { $user_options['edit_size'] = 10; } $user_options['post_format'] = $_POST['user_post_format']; $user_options['editor'] = $_POST['user_editor']; $user_options['enable_wysiwyg'] = !empty($_POST['user_wysiwyg']); $user_options['toolbar_bottom'] = !empty($_POST['user_toolbar_bottom']); $cur->user_options = new ArrayObject($user_options); # --BEHAVIOR-- adminBeforeUserOptionsUpdate $core->callBehavior('adminBeforeUserOptionsUpdate',$cur,$core->auth->userID()); # Update user prefs $core->auth->user_prefs->accessibility->put('nodragdrop',!empty($_POST['user_acc_nodragdrop']),'boolean'); $core->auth->user_prefs->interface->put('enhanceduploader',!empty($_POST['user_ui_enhanceduploader']),'boolean'); if ($core->auth->isSuperAdmin()) { # Applied to all users $core->auth->user_prefs->interface->put('hide_std_favicon',!empty($_POST['user_ui_hide_std_favicon']),'boolean',null,true,true); } $core->auth->user_prefs->interface->put('media_by_page',(integer)$_POST['user_ui_media_by_page'],'integer'); # Udate user $core->updUser($core->auth->userID(),$cur); # --BEHAVIOR-- adminAfterUserOptionsUpdate $core->callBehavior('adminAfterUserOptionsUpdate',$cur,$core->auth->userID()); dcPage::addSuccessNotice(__('Personal options has been successfully updated.')); $core->adminurl->redirect("admin.user.preferences",array(),'#user-options'); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Dashboard options if (isset($_POST['db-options'])) { try { # --BEHAVIOR-- adminBeforeUserOptionsUpdate $core->callBehavior('adminBeforeDashboardOptionsUpdate',$core->auth->userID()); # Update user prefs $core->auth->user_prefs->dashboard->put('doclinks',!empty($_POST['user_dm_doclinks']),'boolean'); $core->auth->user_prefs->dashboard->put('dcnews',!empty($_POST['user_dm_dcnews']),'boolean'); $core->auth->user_prefs->dashboard->put('quickentry',!empty($_POST['user_dm_quickentry']),'boolean'); $core->auth->user_prefs->interface->put('iconset',(!empty($_POST['user_ui_iconset']) ? $_POST['user_ui_iconset'] : '')); $core->auth->user_prefs->interface->put('nofavmenu',empty($_POST['user_ui_nofavmenu']),'boolean'); # --BEHAVIOR-- adminAfterUserOptionsUpdate $core->callBehavior('adminAfterDashboardOptionsUpdate',$core->auth->userID()); dcPage::addSuccessNotice(__('Dashboard options has been successfully updated.')); $core->adminurl->redirect("admin.user.preferences",array(),'#user-favorites'); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Add selected favorites if (!empty($_POST['appendaction'])) { try { if (empty($_POST['append'])) { throw new Exception(__('No favorite selected')); } $user_favs = $core->favs->getFavoriteIDs(false); foreach ($_POST['append'] as $k => $v) { if ($core->favs->exists($v)) { $user_favs[] = $v; } } $core->favs->setFavoriteIDs($user_favs,false); if (!$core->error->flag()) { dcPage::addSuccessNotice(__('Favorites have been successfully added.')); $core->adminurl->redirect("admin.user.preferences",array(),'#user-favorites'); } } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Delete selected favorites if (!empty($_POST['removeaction'])) { try { if (empty($_POST['remove'])) { throw new Exception(__('No favorite selected')); } $user_fav_ids = array(); foreach ($core->favs->getFavoriteIDs(false) as $v) { $user_fav_ids[$v]=true; } foreach ($_POST['remove'] as $v) { if (isset($user_fav_ids[$v])) { unset($user_fav_ids[$v]); } } $core->favs->setFavoriteIDs(array_keys($user_fav_ids),false); if (!$core->error->flag()) { dcPage::addSuccessNotice(__('Favorites have been successfully removed.')); $core->adminurl->redirect("admin.user.preferences",array(),'#user-favorites'); } } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Order favs $order = array(); if (empty($_POST['favs_order']) && !empty($_POST['order'])) { $order = $_POST['order']; asort($order); $order = array_keys($order); } elseif (!empty($_POST['favs_order'])) { $order = explode(',',$_POST['favs_order']); } if (!empty($_POST['saveorder']) && !empty($order)) { foreach ($order as $k => $v) { if (!$core->favs->exists($v)) { unset($order[$k]); } } $core->favs->setFavoriteIDs($order,false); if (!$core->error->flag()) { dcPage::addSuccessNotice(__('Favorites have been successfully updated.')); $core->adminurl->redirect("admin.user.preferences",array(),'#user-favorites'); } } # Replace default favorites by current set (super admin only) if (!empty($_POST['replace']) && $core->auth->isSuperAdmin()) { $user_favs = $core->favs->getFavoriteIDs(false); $core->favs->setFavoriteIDs($user_favs,true); if (!$core->error->flag()) { dcPage::addSuccessNotice(__('Default favorites have been successfully updated.')); $core->adminurl->redirect("admin.user.preferences",array(),'#user-favorites'); } } /* DISPLAY -------------------------------------------------------- */ dcPage::open($page_title, dcPage::jsLoad('js/_preferences.js'). ($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')). dcPage::jsLoad('js/jquery/jquery-ui.custom.js'). dcPage::jsLoad('js/jquery/jquery.ui.touch-punch.js'). dcPage::jsLoad('js/jquery/jquery.pwstrength.js'). '\n". dcPage::jsPageTabs($default_tab). dcPage::jsConfirmClose('user-form'). # --BEHAVIOR-- adminPreferencesHeaders $core->callBehavior('adminPreferencesHeaders'), dcPage::breadcrumb( array( html::escapeHTML($core->auth->userID()) => '', $page_title => '' )) ); # User profile echo '
    '; echo '

    '.__('My profile').'

    '. '
    '. '

    '. form::field('user_name',20,255,html::escapeHTML($user_name)).'

    '. '

    '. form::field('user_firstname',20,255,html::escapeHTML($user_firstname)).'

    '. '

    '. form::field('user_displayname',20,255,html::escapeHTML($user_displayname)).'

    '. '

    '. form::field('user_email',20,255,html::escapeHTML($user_email)).'

    '. '

    '. form::field('user_url',30,255,html::escapeHTML($user_url)).'

    '. '

    '. form::combo('user_lang',$lang_combo,$user_lang,'l10n').'

    '. '

    '. form::combo('user_tz',dt::getZones(true,true),$user_tz).'

    '; if ($core->auth->allowPassChange()) { echo '

    '.__('Change my password').'

    '. '
    '. '

    '. form::password('new_pwd',20,255,'','','',false,' data-indicator="pwindicator" ').'

    '. '
    '. '
    '. '

    '. '
    '. '
    '. '

    '. form::password('new_pwd_c',20,255).'

    '. '

    '. form::password('cur_pwd',20,255).'

    '. '

    '. __('If you have changed your email or password you must provide your current password to save these modifications.'). '

    '; } echo '

    '. $core->formNonce(). '

    '. '
    '. '
    '; # User options : some from actual user profile, dashboard modules, ... echo '
    '; echo '
    '. '

    '.__('My options').'

    '; echo '
    '. '

    '.__('Interface').'

    '. '

    '. '

    '. '

    '.__('If checked, numeric fields will allow to type the elements\' ordering number.').'

    '; echo '

    '. form::field('user_ui_media_by_page',5,3,(integer) $user_ui_media_by_page).'

    '; if ($core->auth->isSuperAdmin()) { echo '

    '. ''.__('This will be applied for all users').'.'. '

    ';//Opera sucks; } echo '
    '; echo '
    '. '

    '.__('Edition').'

    '; foreach ($format_by_editors as $format => $editors) { echo '

    '. form::combo( array('user_editor['.$format.']', 'user_editor_'.$format), array_merge(array(__('Choose an editor') => ''),$editors), $user_options['editor'][$format] ).'

    '; } echo '

    '. form::combo('user_post_format',$available_formats,$user_options['post_format']).'

    '; echo '

    '. form::combo('user_post_status',$status_combo,$user_post_status).'

    '. '

    '. form::field('user_edit_size',5,4,(integer) $user_options['edit_size']).'

    '. '

    '. '

    '. '
    '; echo '

    '.__('Other options').'

    '; # --BEHAVIOR-- adminPreferencesForm $core->callBehavior('adminPreferencesForm',$core); echo '

    '. $core->formNonce(). '

    '. '
    '; echo '
    '; # My dashboard echo '
    '; $ws = $core->auth->user_prefs->addWorkspace('favorites'); echo '

    '.__('My dashboard').'

    '; echo '
    '; echo '

    '.__('My favorites').'

    '; $count = 0; $user_fav = $core->favs->getFavoriteIDs(false); foreach ($user_fav as $id) { $fav = $core->favs->getFavorite($id); if ($fav != false) { // User favorites only if ($count == 0) echo '
      '; $count++; echo '
    • '.''. '
    • '; } } if ($count > 0) echo '
    '; if ($count > 0) { echo '
    '. '

    '.form::hidden('favs_order',''). $core->formNonce(). ' '. '

    '. ($core->auth->isSuperAdmin() ? '
    '. '

    '.__('If you are a super administrator, you may define this set of favorites to be used by default on all blogs of this installation.').'

    '. '

    '.'

    '. '
    ' : ''). '
    '; } else { echo '

    '.__('Currently no personal favorites.').'

    '; } $avail_fav = $core->favs->getFavorites($core->favs->getAvailableFavoritesIDs()); $default_fav_ids = array(); foreach($core->favs->getFavoriteIDs(true) as $v) { $default_fav_ids[$v]=true; } echo '
    '; # /box my-fav echo '
    '; # Available favorites echo '
    '.__('Other available favorites').'
    '; $count = 0; function cmp($a,$b) { if ($a['title'] == $b['title']) { return 0; } return ($a['title'] < $b['title']) ? -1 : 1; } uasort($avail_fav,'cmp'); foreach ($avail_fav as $k => $v) { if (in_array($k,$user_fav)) { unset($avail_fav[$k]); } } foreach ($avail_fav as $k=>$fav) { if ($count == 0) echo '
      '; $count++; echo '
    • '.''. (isset($default_fav_ids[$k]) ? ' '.__('(default favorite)').'' : ''). '
    • '; } if ($count > 0) echo '
    '; echo '

    '. $core->formNonce(). '

    '; echo '
    '; # /available favorites echo '
    '; echo '
    '. '
    '. '

    '.__('Menu').'

    '. '

    '; if (count($iconsets_combo) > 1) { echo '
    '. '

    '.__('Dashboard icons').'

    '. '

    '. form::combo('user_ui_iconset',$iconsets_combo,$user_ui_iconset).'

    '. '
    '; } else { echo ''; } echo '
    '. '

    '.__('Dashboard modules').'

    '. '

    '. '

    '. '


    '. //Opera sucks '

    '; echo '
    '; # --BEHAVIOR-- adminDashboardOptionsForm $core->callBehavior('adminDashboardOptionsForm',$core); echo '

    '. form::hidden('db-options','-'). $core->formNonce(). '

    '. '
    '; echo '
    '; # /multipart-user-favorites dcPage::helpBlock('core_user_pref'); dcPage::close(); dotclear-2.8.0+dfsg/admin/search.php000066400000000000000000000111151256530234200173040ustar00rootroot00000000000000blog->getPosts($params); $counter = $core->blog->getPosts($params,true); $post_list = new adminPostList($core,$posts,$counter->f(0)); } catch (Exception $e) { $core->error->add($e->getMessage()); } } # Get comments elseif ($qtype == 'c') { $starting_scripts .= dcPage::jsLoad('js/_comments.js'); $params['search'] = $q; $params['limit'] = array((($page-1)*$nb_per_page),$nb_per_page); $params['no_content'] = true; $params['order'] = 'comment_dt DESC'; try { $comments = $core->blog->getComments($params); $counter = $core->blog->getComments($params,true); $comment_list = new adminCommentList($core,$comments,$counter->f(0)); } catch (Exception $e) { $core->error->add($e->getMessage()); } } } if ($qtype == 'p') { $posts_actions_page = new dcPostsActionsPage($core,$core->adminurl->get("admin.search"),array('q'=>$q,'qtype'=>$qtype)); if ($posts_actions_page->process()) { return; } } else { $comments_actions_page = new dcCommentsActionsPage($core,$core->adminurl->get("admin.search"),array('q'=>$q,'qtype'=>$qtype)); if ($comments_actions_page->process()) { return; } } dcPage::open(__('Search'),$starting_scripts, dcPage::breadcrumb( array( html::escapeHTML($core->blog->name) => '', __('Search') => '' )) ); echo '
    '. '

    '.__('Search options').'

    '. '

    '.form::field('q',30,255,$q).'

    '. '

    '. '

    '. '

    '. '
    '. '
    '; if ($q && !$core->error->flag()) { $redir = html::escapeHTML($_SERVER['REQUEST_URI']); # Show posts if ($qtype == 'p') { if ($counter->f(0) > 0) { printf('

    '. ($counter->f(0) == 1 ? __('%d entry found') : __('%d entries found')). '

    ',$counter->f(0)); } $post_list->display($page,$nb_per_page, '
    '. '%s'. '
    '. '

    '. '

    '. form::combo(array('action','action1'),$posts_actions_page->getCombo()). '

    '. $core->formNonce(). $posts_actions_page->getHiddenFields(). '
    '. '
    ' ); } # Show posts elseif ($qtype == 'c') { # Actions combo box if ($counter->f(0) > 0) { printf('

    '. ($counter->f(0) == 1 ? __('%d comment found') : __('%d comments found')). '

    ',$counter->f(0)); } $comment_list->display($page,$nb_per_page, '
    '. '%s'. '
    '. '

    '. '

    '. form::combo(array('action','action2'),$comments_actions_page->getCombo()). '

    '. $core->formNonce(). $comments_actions_page->getHiddenFields(). '
    '. '
    ' ); } } dcPage::helpBlock('core_search'); dcPage::close(); dotclear-2.8.0+dfsg/admin/services.php000066400000000000000000000321441256530234200176670ustar00rootroot00000000000000rest->addFunction('getPostById',array('dcRestMethods','getPostById')); $core->rest->addFunction('getCommentById',array('dcRestMethods','getCommentById')); $core->rest->addFunction('quickPost',array('dcRestMethods','quickPost')); $core->rest->addFunction('validatePostMarkup',array('dcRestMethods','validatePostMarkup')); $core->rest->addFunction('getZipMediaContent',array('dcRestMethods','getZipMediaContent')); $core->rest->addFunction('getMeta',array('dcRestMethods','getMeta')); $core->rest->addFunction('delMeta',array('dcRestMethods','delMeta')); $core->rest->addFunction('setPostMeta',array('dcRestMethods','setPostMeta')); $core->rest->addFunction('searchMeta',array('dcRestMethods','searchMeta')); $core->rest->addFunction('setSectionFold',array('dcRestMethods','setSectionFold')); $core->rest->addFunction('getModuleById',array('dcRestMethods','getModuleById')); $core->rest->serve(); /* Common REST methods */ class dcRestMethods { public static function getPostById($core,$get) { if (empty($get['id'])) { throw new Exception('No post ID'); } $params = array('post_id' => (integer) $get['id']); if (isset($get['post_type'])) { $params['post_type'] = $get['post_type']; } $rs = $core->blog->getPosts($params); if ($rs->isEmpty()) { throw new Exception('No post for this ID'); } $rsp = new xmlTag('post'); $rsp->id = $rs->post_id; $rsp->blog_id($rs->blog_id); $rsp->user_id($rs->user_id); $rsp->cat_id($rs->cat_id); $rsp->post_dt($rs->post_dt); $rsp->post_creadt($rs->post_creadt); $rsp->post_upddt($rs->post_upddt); $rsp->post_format($rs->post_format); $rsp->post_url($rs->post_url); $rsp->post_lang($rs->post_lang); $rsp->post_title($rs->post_title); $rsp->post_excerpt($rs->post_excerpt); $rsp->post_excerpt_xhtml($rs->post_excerpt_xhtml); $rsp->post_content($rs->post_content); $rsp->post_content_xhtml($rs->post_content_xhtml); $rsp->post_notes($rs->post_notes); $rsp->post_status($rs->post_status); $rsp->post_selected($rs->post_selected); $rsp->post_open_comment($rs->post_open_comment); $rsp->post_open_tb($rs->post_open_tb); $rsp->nb_comment($rs->nb_comment); $rsp->nb_trackback($rs->nb_trackback); $rsp->user_name($rs->user_name); $rsp->user_firstname($rs->user_firstname); $rsp->user_displayname($rs->user_displayname); $rsp->user_email($rs->user_email); $rsp->user_url($rs->user_url); $rsp->cat_title($rs->cat_title); $rsp->cat_url($rs->cat_url); $rsp->post_display_content($rs->getContent(true)); $rsp->post_display_excerpt($rs->getExcerpt(true)); $metaTag = new xmlTag('meta'); if (($meta = @unserialize($rs->post_meta)) !== false) { foreach ($meta as $K => $V) { foreach ($V as $v) { $metaTag->$K($v); } } } $rsp->post_meta($metaTag); return $rsp; } public static function getCommentById($core,$get) { if (empty($get['id'])) { throw new Exception('No comment ID'); } $rs = $core->blog->getComments(array('comment_id' => (integer) $get['id'])); if ($rs->isEmpty()) { throw new Exception('No comment for this ID'); } $rsp = new xmlTag('post'); $rsp->id = $rs->comment_id; $rsp->comment_dt($rs->comment_dt); $rsp->comment_upddt($rs->comment_upddt); $rsp->comment_author($rs->comment_author); $rsp->comment_site($rs->comment_site); $rsp->comment_content($rs->comment_content); $rsp->comment_trackback($rs->comment_trackback); $rsp->comment_status($rs->comment_status); $rsp->post_title($rs->post_title); $rsp->post_url($rs->post_url); $rsp->post_id($rs->post_id); $rsp->post_dt($rs->post_dt); $rsp->user_id($rs->user_id); $rsp->comment_display_content($rs->getContent(true)); if ($core->auth->userID()) { $rsp->comment_ip($rs->comment_ip); $rsp->comment_email($rs->comment_email); $rsp->comment_spam_disp(dcAntispam::statusMessage($rs)); } return $rsp; } public static function quickPost($core,$get,$post) { # Create category if (!empty($post['new_cat_title']) && $core->auth->check('categories', $core->blog->id)) { $cur_cat = $core->con->openCursor($core->prefix.'category'); $cur_cat->cat_title = $post['new_cat_title']; $cur_cat->cat_url = ''; $parent_cat = !empty($post['new_cat_parent']) ? $post['new_cat_parent'] : ''; # --BEHAVIOR-- adminBeforeCategoryCreate $core->callBehavior('adminBeforeCategoryCreate', $cur_cat); $post['cat_id'] = $core->blog->addCategory($cur_cat, (integer) $parent_cat); # --BEHAVIOR-- adminAfterCategoryCreate $core->callBehavior('adminAfterCategoryCreate', $cur_cat, $post['cat_id']); } $cur = $core->con->openCursor($core->prefix.'post'); $cur->post_title = !empty($post['post_title']) ? $post['post_title'] : ''; $cur->user_id = $core->auth->userID(); $cur->post_content = !empty($post['post_content']) ? $post['post_content'] : ''; $cur->cat_id = !empty($post['cat_id']) ? (integer) $post['cat_id'] : null; $cur->post_format = !empty($post['post_format']) ? $post['post_format'] : 'xhtml'; $cur->post_lang = !empty($post['post_lang']) ? $post['post_lang'] : ''; $cur->post_status = !empty($post['post_status']) ? (integer) $post['post_status'] : 0; $cur->post_open_comment = (integer) $core->blog->settings->system->allow_comments; $cur->post_open_tb = (integer) $core->blog->settings->system->allow_trackbacks; # --BEHAVIOR-- adminBeforePostCreate $core->callBehavior('adminBeforePostCreate',$cur); $return_id = $core->blog->addPost($cur); # --BEHAVIOR-- adminAfterPostCreate $core->callBehavior('adminAfterPostCreate',$cur,$return_id); $rsp = new xmlTag('post'); $rsp->id = $return_id; $post = $core->blog->getPosts(array('post_id' => $return_id)); $rsp->post_status = $post->post_status; $rsp->post_url = $post->getURL(); return $rsp; } public static function validatePostMarkup($core,$get,$post) { if (!isset($post['excerpt'])) { throw new Exception('No entry excerpt'); } if (!isset($post['content'])) { throw new Exception('No entry content'); } if (empty($post['format'])) { throw new Exception('No entry format'); } if (!isset($post['lang'])) { throw new Exception('No entry lang'); } $excerpt = $post['excerpt']; $excerpt_xhtml = ''; $content = $post['content']; $content_xhtml = ''; $format = $post['format']; $lang = $post['lang']; $core->blog->setPostContent(0,$format,$lang,$excerpt,$excerpt_xhtml,$content,$content_xhtml); $rsp = new xmlTag('result'); $v = htmlValidator::validate($excerpt_xhtml.$content_xhtml); $rsp->valid($v['valid']); $rsp->errors($v['errors']); return $rsp; } public static function getZipMediaContent($core,$get,$post) { if (empty($get['id'])) { throw new Exception('No media ID'); } $id = (integer) $get['id']; if (!$core->auth->check('media,media_admin',$core->blog)) { throw new Exception('Permission denied'); } try { $core->media = new dcMedia($core); $file = $core->media->getFile($id); } catch (Exception $e) {} if ($file === null || $file->type != 'application/zip' || !$file->editable) { throw new Exception('Not a valid file'); } $rsp = new xmlTag('result'); $content = $core->media->getZipContent($file); foreach ($content as $k => $v) { $rsp->file($k); } return $rsp; } public static function getMeta($core,$get) { $postid = !empty($get['postId']) ? $get['postId'] : null; $limit = !empty($get['limit']) ? $get['limit'] : null; $metaId = !empty($get['metaId']) ? $get['metaId'] : null; $metaType = !empty($get['metaType']) ? $get['metaType'] : null; $sortby = !empty($get['sortby']) ? $get['sortby'] : 'meta_type,asc'; $rs = $core->meta->getMetadata(array( 'meta_type' => $metaType, 'limit' => $limit, 'meta_id' => $metaId, 'post_id' => $postid)); $rs = $core->meta->computeMetaStats($rs); $sortby = explode(',',$sortby); $sort = $sortby[0]; $order = isset($sortby[1]) ? $sortby[1] : 'asc'; switch ($sort) { case 'metaId': $sort = 'meta_id_lower'; break; case 'count': $sort = 'count'; break; case 'metaType': $sort = 'meta_type'; break; default: $sort = 'meta_type'; } $rs->sort($sort,$order); $rsp = new xmlTag(); while ($rs->fetch()) { $metaTag = new xmlTag('meta'); $metaTag->type = $rs->meta_type; $metaTag->uri = rawurlencode($rs->meta_id); $metaTag->count = $rs->count; $metaTag->percent = $rs->percent; $metaTag->roundpercent = $rs->roundpercent; $metaTag->CDATA($rs->meta_id); $rsp->insertNode($metaTag); } return $rsp; } public static function setPostMeta($core,$get,$post) { if (empty($post['postId'])) { throw new Exception('No post ID'); } if (empty($post['meta']) && $post['meta'] != '0') { throw new Exception('No meta'); } if (empty($post['metaType'])) { throw new Exception('No meta type'); } # Get previous meta for post $post_meta = $core->meta->getMetadata(array( 'meta_type' => $post['metaType'], 'post_id' => $post['postId'])); $pm = array(); while ($post_meta->fetch()) { $pm[] = $post_meta->meta_id; } foreach ($core->meta->splitMetaValues($post['meta']) as $m) { if (!in_array($m,$pm)) { $core->meta->setPostMeta($post['postId'],$post['metaType'],$m); } } return true; } public static function delMeta($core,$get,$post) { if (empty($post['postId'])) { throw new Exception('No post ID'); } if (empty($post['metaId']) && $post['metaId'] != '0') { throw new Exception('No meta ID'); } if (empty($post['metaType'])) { throw new Exception('No meta type'); } $core->meta->delPostMeta($post['postId'],$post['metaType'],$post['metaId']); return true; } public static function searchMeta($core,$get) { $q = !empty($get['q']) ? $get['q'] : null; $metaType = !empty($get['metaType']) ? $get['metaType'] : null; $sortby = !empty($get['sortby']) ? $get['sortby'] : 'meta_type,asc'; $rs = $core->meta->getMetadata(array('meta_type' => $metaType)); $rs = $core->meta->computeMetaStats($rs); $sortby = explode(',',$sortby); $sort = $sortby[0]; $order = isset($sortby[1]) ? $sortby[1] : 'asc'; switch ($sort) { case 'metaId': $sort = 'meta_id_lower'; break; case 'count': $sort = 'count'; break; case 'metaType': $sort = 'meta_type'; break; default: $sort = 'meta_type'; } $rs->sort($sort,$order); $rsp = new xmlTag(); while ($rs->fetch()) { if (stripos($rs->meta_id,$q) === 0) { $metaTag = new xmlTag('meta'); $metaTag->type = $rs->meta_type; $metaTag->uri = rawurlencode($rs->meta_id); $metaTag->count = $rs->count; $metaTag->percent = $rs->percent; $metaTag->roundpercent = $rs->roundpercent; $metaTag->CDATA($rs->meta_id); $rsp->insertNode($metaTag); } } return $rsp; } public static function setSectionFold($core,$get,$post) { if (empty($post['section'])) { throw new Exception('No section name'); } if ($core->auth->user_prefs->toggles === null) { $core->auth->user_prefs->addWorkspace('toggles'); } $section = $post['section']; $status = isset($post['value']) && ($post['value'] != 0); if ($core->auth->user_prefs->toggles->prefExists('unfolded_sections')) { $toggles = explode(',',trim($core->auth->user_prefs->toggles->unfolded_sections)); } else { $toggles = array(); } $k = array_search($section,$toggles); if ($status) { // true == Fold section ==> remove it from unfolded list if ($k !== false) { unset($toggles[$k]); } } else { // false == unfold section ==> add it to unfolded list if ($k === false) { $toggles[]=$section; }; } $core->auth->user_prefs->toggles->put('unfolded_sections',join(',',$toggles)); return true; } public static function getModuleById($core, $get, $post) { if (empty($get['id'])) { throw new Exception('No module ID'); } if (empty($get['list'])) { throw new Exception('No list ID'); } $id = $get['id']; $list = $get['list']; $module = array(); if ($list == 'plugin-activate') { $modules = $core->plugins->getModules(); if (empty($modules) || !isset($modules[$id])) { throw new Exception('Unknow module ID'); } $module = $modules[$id]; } elseif ($list == 'plugin-new') { $store = new dcStore( $core->plugins, $core->blog->settings->system->store_plugin_url ); $store->check(); $modules = $store->get(); if (empty($modules) || !isset($modules[$id])) { throw new Exception('Unknow module ID'); } $module = $modules[$id]; } else { // behavior not implemented yet } if (empty($module)) { throw new Exception('Unknow module ID'); } $module = adminModulesList::sanitizeModule($id, $module); $rsp = new xmlTag('module'); $rsp->id = $id; foreach($module as $k => $v) { $rsp->{$k}((string) $v); } return $rsp; } } dotclear-2.8.0+dfsg/admin/style/000077500000000000000000000000001256530234200164675ustar00rootroot00000000000000dotclear-2.8.0+dfsg/admin/style/bg_h2.png000066400000000000000000000001331256530234200201530ustar00rootroot00000000000000PNG  IHDRT*3PLTE`IDATxc9`C d6IENDB`dotclear-2.8.0+dfsg/admin/style/bg_menu.png000066400000000000000000000001241256530234200206060ustar00rootroot00000000000000PNG  IHDRdPLTEn IDATxcd(<e|m`zIENDB`dotclear-2.8.0+dfsg/admin/style/bg_wrapper.png000066400000000000000000000001721256530234200213250ustar00rootroot00000000000000PNG  IHDR WPLTEU|ltRNS8v{"IDATx^7 =UuMuQuQuNK`uIENDB`dotclear-2.8.0+dfsg/admin/style/cancel.png000066400000000000000000000003031256530234200204160ustar00rootroot00000000000000PNG  IHDR a!PLTE럟쟟랞``__00 .tRNS0JOIDATx=[ 1 Mz 3HnpF{ ,7"X E!ةHy;+H܈YV!DAIENDB`dotclear-2.8.0+dfsg/admin/style/dashboard-alt.png000066400000000000000000000003761256530234200217100ustar00rootroot00000000000000PNG  IHDR/\IDATxm aF`G`&h<8B7`Fpn2#O ik5&1D\]/ yA(Jr8U@?߆I O8m[06!c: NFMC) Տm1ZzT^}Qoav:ǡ7>!IENDB`dotclear-2.8.0+dfsg/admin/style/dashboard.png000066400000000000000000000003441256530234200211250ustar00rootroot00000000000000PNG  IHDR醟IDATxa a$ N*P H@B% {r Fq'Gc;nW5Gtdqs۱E'PHvGj嗡 |z zMTIENDB`dotclear-2.8.0+dfsg/admin/style/date-picker.css000066400000000000000000000011431256530234200213700ustar00rootroot00000000000000.date-picker { border-collapse: collapse; background: #fff; color: #fff; border: 1px solid #666; border-width: 1px 2px 2px 1px; width: auto; } .date-picker th { border: none; color: #000; text-align: center; } .date-picker td { border: 1px solid #666; text-align: center; padding : 4px 6px; } th.date-picker-month { text-align: left; } th.date-picker-year { text-align: right; } .date-picker-control, th.date-picker-control { color: #2373A8; cursor: pointer; } .date-picker-day, .date-picker-today { color: #000; background: #eee; cursor: pointer; } .date-picker-today { background: #ccc; } dotclear-2.8.0+dfsg/admin/style/dc_logos/000077500000000000000000000000001256530234200202605ustar00rootroot00000000000000dotclear-2.8.0+dfsg/admin/style/dc_logos/b-dotclear120.png000066400000000000000000000036011256530234200232250ustar00rootroot00000000000000PNG  IHDR,~PLTE]3̢33̢_U333̺]3̢]]]])]]]]]9]])))])))>kۢqVՔ冻]dٍ]Z@PWS9C=FM@tRNS@@`0`0P߯ p PpPp0`@ p PPϟ00Pp PYuIDATx^n8dnrE+RB1Qh6msy_ΥeVKBChP~8/9[Xl~[|uח{`%Ybm.<}vWJta=vY`t]p~hh`嫳/;J`3w}`:c|m`֭fdݛT3,,FjHSX |uX'fL<,A+RiƸ o >_eLuUNv"V\X2Z?Ȗ<4*,/X,YrD,a([ŎMu%J,XjL6TQZ1:,j㊢nLtVJ7+2_ Vu!?R}|;iB|u3QΔ ]ղYmFK_1VZe\x)+*>6PSH3/x-\+ES4JJ?=zMkJdMp6>+CDt57߆NRk>iuB\|q4FfuXiu~X,tr X,` X,` X,` X,` X,` X,` X,` X,` X,` X,` Xo޽: X?گ;A0 _@ I Dڦ+ޙV+^3[oW. /'VWkL -XXRc ̉Vǒ( hub"P|(:V/%@x,pY,Wʯo(#ʼnN2IX}uZϟ7&VL>p9JbQ&Lå8#[5>NuJGb䑤w3~1#TU@`e!z;x=Ik:Sh5PFoHɊ>` }ֶ`iV?:Pf)n&cn"HޖF+`V ,Z,$V, Nx,_@گN7/VzK lM4X.m.9( -"kXQEmwCba2K@qY0bkEx,ryQB ;5 |yX}ux@lXհb ;,kkX}uXyl*WҕEg=vN Qb䥁 eU&ٺRK9-Fkڌbc!bޞEFPTֈښRO)ќ,A9H;:Y}m\W )JFG]@ \kyBZZAW"Γ>$D,.qX.B6K31| pm;E(WqKy;9iČM^eAXY8yIX[BSّv}+^I_2wժ^йm2&2lPJ9]b&kr6P NSViq ("5} p?H Erj!ˀ߱Ig$nQbc°8-AG߯;wm &&ڤoVY@"@2랷,l%b&~[``ǃ| LUm,CENN΂AFVYu[\W>Y[dcg"7E#Pjب@{Agf斨OK+:H۸_.g!`l431?nQ(77H)c̱.0$s,; ]TQEIs+r@]_NkRmd aު[WTcsA9xslO%~r{(AҔ+tZ!Qѐ{\4yn,<t&0crq,;$s}U/~LknÇ!s mHRA0W&m}2N/u`\&[fhIUcG3c|z*M#_fe?D{2ցd313(wP<Vܬɽo{w B0Nv|[ϝB2QwJހV&HPi[ЬHU'mي5I&kĿ"lm\dׯê~,Q/[Q:Zlm~)WoX 8&_B 7}`X,cf>,>/`H`0)xd_!`}(`ZL#n$^o/=]P_E.jeʭgUYN, A̲f29p dRI5bPT;42$.;BF2(clOz0ܗ7#,4+U vJ}mJϝ@D fLzqea|0y z\ ~DI7ǻD5ГTO>}T1KIENDB`dotclear-2.8.0+dfsg/admin/style/dc_logos/w-dotclear180.png000066400000000000000000000026511256530234200232640ustar00rootroot00000000000000PNG  IHDR3d^PLTEۓf]ߥoxZBي9WިP[~0O⯖KHCDKivơ8IJm30 % M6bREE9'?,`C"fj-Wy 4jϩ~ez~o%^uv裵*V;1DE]rje[ PF)K~]e>\#D[ F5#pmjc{g>'{mU}꿾ʢOպH]Wׅumpmz8+0s\VB(wZݧ]-jfR:@Me::x3{F&NtSLXx2jx3Q.}[yC0PΧ@z]B{wWc_bԯ.բ>ͫOWWp ftY ^t&r:2yK0tVZ=\=U^-FS(i&@-?{ui:h-M^ͩZdL)2ZAюmMfXϩOi>Ct=!JDγ\]G~P)}T3DWmm7Fj j  <^}u׫Qn!輚6)q 0j~}Ǐ=_s5y=9u‘?b+'W o~/6Tg 9ބwh)Rׁڣ;ﯯKk\Ca>4Ǯ,cԽAt!{YA n/PS|6&~O BύH^^"s5际 Пxf!gqR!SIENDB`dotclear-2.8.0+dfsg/admin/style/dc_logos/w-dotclear240.png000066400000000000000000000036401256530234200232600ustar00rootroot00000000000000PNG  IHDRAp PLTE숉숉숉숉숉숉ۋNݛܲ~Jmߣ?afx؛ᯄVҺ]o3ߥ؁ۓ6ѸWC3̷S=ZݜJMx୽fيP0F@9œdYtRNS@` `Pp@ 0ߏp0¹-%IDATx^I@QBL0DIyt;V6B\tm*%umʥL^*ŚIV lcsV0x7d L}Q#So ^u Z8H=Tfa'nA. ߼1OĈpK:k1JTc1 w|Pt[^c,?yٽ]VduiulV崗Of nto 3,+|g,6<7bFطyFI߬D0#֙6 as#WyXXzyni#ͬJs˶V&X59EFKoлӂq=?x+5 ";[01/{$1|l&|xT ޶vMBq>g R1E%]p H5,hNPǀ  09M8QC!uif; M5\IvǴ<>d%,+<g2MF) @ `< Hၞ:ƩI-6U4Yt#w]xD2iqr8J IENDB`dotclear-2.8.0+dfsg/admin/style/dc_logos/w-dotclear90.png000066400000000000000000000017231256530234200232030ustar00rootroot00000000000000PNG  IHDRdHrPLTE`aa`aa`aa`aa`aa`aa`aa`aa`aa`aa`aa`aa`aa`aa`aa`aa`aa3aԺ]oxذ@JЛ޹Zmݜ⶷Sf6ߥȶNCfѸW?ά3ڿkx09F᯲؁يۓڌݗㄶVҴJMN:tRNS0P@` @Pp0 `!׭gwIDATx^gwJ`h 8^{0 $9'IҲaY${ugi[֟. ;՗e"߆!âҐ݂ղSclmE>$<6I#Eqq՜#Z~W|,;K|?f₍%!?^3 `A|D҈zсN[m_C]"$,ϳ">GE8\MD5H %95"r0CT"g&QƹA|)xH=3R7ӓ."Y " IbꐼAD5CG ] ҿM5>EN88^lmWj xgz JQ5(E 5A Ed`F4͍0ہ2nVkAvƓfJ2>ދlmf?*ē=q'lrANJ+'۩l. Ju&Y>cݎKȆ/%9(ZTۑW;I,/-W:eG_zCUBIP