From 140706e7057a30f6f270ac1a2468e01483f7c01d Mon Sep 17 00:00:00 2001 From: Jean-Christian Denis Date: Thu, 26 Aug 2021 00:06:10 +0200 Subject: [PATCH] initial commit --- CHANGELOG | 71 +++++ LICENSE | 339 +++++++++++++++++++++ README.md | 22 ++ _admin.php | 20 ++ _define.php | 36 +++ _public.php | 20 ++ _widgets.php | 519 +++++++++++++++++++++++++++++++++ icon.png | Bin 0 -> 779 bytes lastpostsextend-screenshot.jpg | Bin 0 -> 42110 bytes locales/fr/main.lang.php | 52 ++++ locales/fr/main.po | 76 +++++ 11 files changed, 1155 insertions(+) create mode 100644 CHANGELOG create mode 100644 LICENSE create mode 100644 README.md create mode 100644 _admin.php create mode 100644 _define.php create mode 100644 _public.php create mode 100644 _widgets.php create mode 100644 icon.png create mode 100644 lastpostsextend-screenshot.jpg create mode 100644 locales/fr/main.lang.php create mode 100644 locales/fr/main.po diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..53241ac --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,71 @@ +lastpostsExtend 2016.10.24 +=========================================================== + * oops missed 2015 update + +lastpostsExtend 2016.10.23 +=========================================================== + * Used new widget rendering method + * Updated year + +lastpostsExtend 2015.01.13 Pierre Van Glabeke +=========================================================== + * Compatibilité dotclear 2.7 + * Ajout options widget et compatibilité currywurst + * Modifications locales + +lastpostsExtend 2013.12.01 +=========================================================== + * Fix XHTML validation on widget + * Fix category id from wrong table. thx BG + +lastpostsExtend 2013.11.12 +=========================================================== + * Switch to Dotclear 2.6 + * Add widget options + +lastpostsExtend 2013.06.30 +=========================================================== + * Used new 'homeonly' style for widgets + +lastpostsExtend 2011.08.01 +=========================================================== + * Added support of plugin muppet (post types) + * Try to fix date compare on sql request + +lastpostsExtend 0.10 - 2010-08-19 +=========================================================== + * Sort by comments (annso) + +lastpostsExtend 0.9 - 2010-06-09 +=========================================================== + * Writed now for DC 2.2 or higher + +lastpostsExtend 0.8.2 - 2010-03-29 +=========================================================== + * Fixed getPosts by using sudo + * Fixed entryFirstImage on non-pushided post + +lastpostsExtend 0.8.1 - 2009-12-31 +=========================================================== + * Happy new year! + * Fixed multiple bugs and crashes + +lastpostsExtend 0.8 - 2009-12-30 +=========================================================== + * Added post words limit + * Added post status limit + * Added post password limit (closes #385) + * Changed blog->getPosts to internal getPosts + +lastpostsExtend 0.7 2009-12-10 +=========================================================== + * Added entryFirstimage + * Fixed typo + +lastpostsExtend 0.6 - 2009-08-23 +=========================================================== + * Added ''pluginsPage'' support + +lastpostsExtend 0.5 - 2009-08-16 +=========================================================== + * Fixed php 5.3 compatibility diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d511905 --- /dev/null +++ b/LICENSE @@ -0,0 +1,339 @@ + 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. diff --git a/README.md b/README.md new file mode 100644 index 0000000..695d61f --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# README + +## WHAT IS LASTPOSTSEXTEND ? + +"lastposts Extend" is a plugin for the open-source +web publishing software called Dotclear. + +Like widget lastposts but with more options. + +## REQUIREMENTS + + lastpostsExtend requires: + + * permissions to manage widgets + * Dotclear 2.6 + +## USAGE + +First install lastpostsExtend, manualy from a zip package or from +Dotaddict repository. (See Dotclear's documentation to know how do this) + +Add and configure "Last entries (Extended)" from widgets manager. diff --git a/_admin.php b/_admin.php new file mode 100644 index 0000000..77cd391 --- /dev/null +++ b/_admin.php @@ -0,0 +1,20 @@ +registerModule( + /* Name */ + "Last entries (Extended)", + /* Description*/ + "Extended list of entries", + /* Author */ + "Jean-Christian Denis", + /* Version */ + '2016.10.24', + array( + 'permissions' => 'admin', + 'type' => 'plugin', + 'dc_min' => '2.10', + 'support' => 'http://lab.dotclear.org/wiki/plugin/lastpostsExtend', + 'details' => 'http://plugins.dotaddict.org/dc2/details/lastpostsExtend' + ) +); \ No newline at end of file diff --git a/_public.php b/_public.php new file mode 100644 index 0000000..0070b56 --- /dev/null +++ b/_public.php @@ -0,0 +1,20 @@ +addBehavior( + 'initWidgets', + array('lastpostsextendWidget', 'initWidget') +); + +class lastpostsextendWidget +{ + public static function initWidget($w) + { + global $core; + + # Create widget + $w->create( + 'lastpostsextend', + __('Last entries (Extended)'), + array('lastpostsextendWidget', 'parseWidget'), + null, + __('Extended list of entries') + ); + # Title + $w->lastpostsextend->setting( + 'title', + __('Title:'), + __('Last entries'), + 'text' + ); + # type + $posttypes = array( + __('Post') => 'post', + __('Page') => 'page', + __('Gallery') => 'galitem' + ); + # plugin muppet types + if ($core->plugins->moduleExists('muppet')) { + $muppet_types = muppet::getPostTypes(); + if(is_array($muppet_types) && !empty($muppet_types)) { + + foreach($muppet_types as $k => $v) { + $posttypes[$v['name']] = $k; + } + } + } + $w->lastpostsextend->setting( + 'posttype', + __('Type:'), + 'post', + 'combo', + $posttypes + ); + # Category (post and page have same category) + $rs = $core->blog->getCategories(array( + 'post_type' => 'post' + )); + $categories = array( + '' => '', + __('Uncategorized') => 'null' + ); + while ($rs->fetch()) { + $categories[str_repeat( + '  ', + $rs->level-1 + ).'• '.html::escapeHTML($rs->cat_title)] = + $rs->cat_id; + } + $w->lastpostsextend->setting( + 'category', + __('Category:'), + '', + 'combo', + $categories + ); + unset($rs,$categories); + # Pasworded + $w->lastpostsextend->setting( + 'passworded', + __('Protection:'), + 'no', + 'combo', + array( + __('all') => 'all', + __('only without password') => 'no', + __('only with password') => 'yes' + ) + ); + # Status + $w->lastpostsextend->setting( + 'status', + __('Status:'), + '1', + 'combo', + array( + __('all') => 'all', + __('pending') => '-2', + __('scheduled') => '-1', + __('unpublished') => '0', + __('published') => '1' + ) + ); + # Selected entries only + $w->lastpostsextend->setting( + 'selectedonly', + __('Selected entries only'), + 0, + 'check' + ); + # Updated entries only + $w->lastpostsextend->setting( + 'updatedonly', + __('Updated entries only'), + 0, + 'check' + ); + # Tag + if ($core->plugins->moduleExists('tags')) + { + $w->lastpostsextend->setting( + 'tag', + __('Limit to tags:'), + '', + 'text' + ); + } + # Search + $w->lastpostsextend->setting( + 'search', + __('Limit to words:'), + '', + 'text' + ); + # Entries limit + $w->lastpostsextend->setting( + 'limit', + __('Entries limit:'), + 10, + 'text' + ); + # Sort type + $w->lastpostsextend->setting( + 'sortby', + __('Order by:'), + 'date', + 'combo', + array( + __('Date') => 'date', + __('Title') => 'post_title', + __('Comments') => 'nb_comment' + ) + ); + # Sort order + $w->lastpostsextend->setting( + 'sort', + __('Sort:'), + 'desc', + 'combo', + array( + __('Ascending') => 'asc', + __('Descending') => 'desc' + ) + ); + # First image + $w->lastpostsextend->setting( + 'firstimage', + __('Show entries first image:'), + '', + 'combo', + array( + __('no') => '', + __('square') => 'sq', + __('thumbnail') => 't', + __('small') => 's', + __('medium') => 'm', + __('original') => 'o' + ) + ); + # With excerpt + $w->lastpostsextend->setting( + 'excerpt', + __('Show entries excerpt'), + 0, + 'check' + ); + # Excerpt length + $w->lastpostsextend->setting( + 'excerptlen', + __('Excerpt length:'), + 100, + 'text' + ); + # Comment count + $w->lastpostsextend->setting( + 'commentscount', + __('Show comments count'), + 0, + 'check' + ); + # Home only + $w->lastpostsextend->setting( + 'homeonly', + __('Display on:'), + 0, + 'combo', + array( + __('All pages') => 0, + __('Home page only') => 1, + __('Except on home page') => 2 + ) + ); + # widget option - content only + $w->lastpostsextend->setting( + 'content_only', + __('Content only'), + 0, + 'check' + ); + # widget option - additionnal CSS + $w->lastpostsextend->setting( + 'class', + __('CSS class:'), + '' + ); + # widget option - put offline + $w->lastpostsextend->setting( + 'offline', + __('Offline'), + 0, + 'check' + ); + } + + public static function parseWidget($w) + { + global $core; + + $params = array( + 'sql' => '', + 'columns' => array(), + 'from' => '' + ); + + # Widget is offline + if ($w->offline) + return; + + # Home page only + if ($w->homeonly == 1 && $core->url->type != 'default' + || $w->homeonly == 2 && $core->url->type == 'default' + ) { + return null; + } + + # Need posts excerpt + if ($w->excerpt) { + $params['columns'][] = 'post_excerpt'; + } + + # Passworded + if ($w->passworded == 'yes') { + $params['sql'] .= 'AND post_password IS NOT NULL '; + } + elseif ($w->passworded == 'no') { + $params['sql'] .= 'AND post_password IS NULL '; + } + + # Status + if ($w->status != 'all') { + $params['post_status'] = $w->status; + } + + # Search words + if ('' != $w->search) { + $params['search'] = $w->search; + } + + # Updated posts only + if ($w->updatedonly) { + $params['sql'] .= + "AND post_creadt < post_upddt ". + "AND post_dt < post_upddt "; +/* + $params['sql'] .= + "AND TIMESTAMP(post_creadt ,'DD-MM-YYYY HH24:MI:SS') < TIMESTAMP(post_upddt ,'DD-MM-YYYY HH24:MI:SS') ". + "AND TIMESTAMP(post_dt ,'DD-MM-YYYY HH24:MI:SS') < TIMESTAMP(post_upddt ,'DD-MM-YYYY HH24:MI:SS') "; +//*/ + $params['order'] = $w->sortby == 'date' ? + 'post_upddt ' : $w->sortby.' '; + } + else { + $params['order'] = $w->sortby == 'date' ? + 'post_dt ' : $w->sortby.' '; + } + $params['order'] .= $w->sort == 'asc' ? 'asc' : 'desc'; + $params['limit'] = abs((integer) $w->limit); + $params['no_content'] = true; + + # Selected posts only + if ($w->selectedonly) { + $params['post_selected'] = 1; + } + + # Type + $params['post_type'] = $w->posttype; + + # Category + if ($w->category) { + if ($w->category == 'null') { + $params['sql'] .= ' AND P.cat_id IS NULL '; + } + elseif (is_numeric($w->category)) { + $params['cat_id'] = (integer) $w->category; + } + else { + $params['cat_url'] = $w->category; + } + } + + # Tags + if ($core->plugins->moduleExists('tags') && $w->tag) { + $tags = explode(',', $w->tag); + foreach($tags as $i => $tag) { + $tags[$i] = trim($tag); + } + $params['from'] .= ', '.$core->prefix.'meta META '; + $params['sql'] .= 'AND META.post_id = P.post_id '; + $params['sql'] .= "AND META.meta_id ".$core->con->in($tags)." "; + $params['sql'] .= "AND META.meta_type = 'tag' "; + } + + $rs = $core->auth->sudo( + array($core->blog, 'getPosts'), + $params, + false + ); + + # No result + if ($rs->isEmpty()) { + + return null; + } + + # Return + $res = $w->title ? $w->renderTitle(html::escapeHTML($w->title)) : ''; + + while ($rs->fetch()) { + $res .= '
  • '. + '<'.($rs->post_status == 1 ? 'a href="'.$rs->getURL().'"' : 'span'). + ' title="'. + dt::dt2str( + $core->blog->settings->system->date_format, + $rs->post_upddt + ).', '. + dt::dt2str( + $core->blog->settings->system->time_format, + $rs->post_upddt + ).'">'. + html::escapeHTML($rs->post_title). + 'post_status == 1 ? 'a' : 'span').'>'; + + # Nb comments + if ($w->commentscount && $rs->post_status == 1) { + $res .= ' ('.$rs->nb_comment.')'; + } + + # First image + if ($w->firstimage != '') { + $res .= self::entryFirstImage( + $core, + $rs->post_type, + $rs->post_id, + $w->firstimage + ); + } + + # Excerpt + if ($w->excerpt) { + $excerpt = $rs->post_excerpt; + if ($rs->post_format == 'wiki') { + $core->initWikiComment(); + $excerpt = $core->wikiTransform($excerpt); + $excerpt = $core->HTMLfilter($excerpt); + } + if (strlen($excerpt) > 0) { + $cut = text::cutString( + $excerpt, + abs((integer) $w->excerptlen) + ); + $res .= ' : '.$cut.(strlen($cut) < strlen($excerpt) ? + '...' : ''); + + unset($cut); + } + } + $res .= '
  • '; + } + + return $w->renderDiv( + $w->content_only, + 'lastpostsextend '.$w->class, + '', + '
      '.$res.'
    ' + ); + } + + private static function entryFirstImage($core, $type, $id, $size='s') + { + if (!in_array($type, array('post', 'page', 'galitem'))) { + + return ''; + } + + $rs = $core->auth->sudo( + array($core->blog, 'getPosts'), + array('post_id' => $id, 'post_type' => $type), + false + ); + + if ($rs->isEmpty()) { + + return ''; + } + + if (!preg_match('/^sq|t|s|m|o$/',$size)) { + $size = 's'; + } + + $p_url = $core->blog->settings->system->public_url; + $p_site = preg_replace( + '#^(.+?//.+?)/(.*)$#', + '$1', + $core->blog->url + ); + $p_root = $core->blog->public_path; + + $pattern = '(?:'.preg_quote($p_site, '/').')?'.preg_quote($p_url, '/'); + $pattern = sprintf('/]+/msu', $pattern); + + $src = ''; + $alt = ''; + + $subject = $rs->post_excerpt_xhtml.$rs->post_content_xhtml.$rs->cat_desc; + if (preg_match_all($pattern, $subject, $m) > 0) { + + foreach ($m[1] as $i => $img) { + if (($src = self::ContentFirstImageLookup($p_root, $img, $size)) !== false) { + + $src = $p_url.(dirname($img) != '/' ? dirname($img) : '').'/'.$src; + if (preg_match('/alt="([^"]+)"/', $m[0][$i], $malt)) { + $alt = $malt[1]; + } + break; + } + } + } + + if (!$src) { + + return ''; + } + + return + '
    '. + ''. + "
    \n"; + } + + private static function ContentFirstImageLookup($root,$img,$size) + { + # Get base name and extension + $info = path::info($img); + $base = $info['base']; + + if (preg_match('/^\.(.+)_(sq|t|s|m)$/',$base,$m)) { + $base = $m[1]; + } + + $res = false; + if ($size != 'o' && file_exists($root.'/'.$info['dirname'].'/.'.$base.'_'.$size.'.jpg')) { + $res = '.'.$base.'_'.$size.'.jpg'; + } + else { + $f = $root.'/'.$info['dirname'].'/'.$base; + if (file_exists($f.'.'.$info['extension'])) { + $res = $base.'.'.$info['extension']; + } + elseif (file_exists($f.'.jpg')) { + $res = $base.'.jpg'; + } + elseif (file_exists($f.'.png')) { + $res = $base.'.png'; + } + elseif (file_exists($f.'.gif')) { + $res = $base.'.gif'; + } + } + + return $res ? $res : false; + } +} \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..80fe1ed0cc75fbb67e9398ae686641f8fb287238 GIT binary patch literal 779 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 A>i_@% literal 0 HcmV?d00001 diff --git a/locales/fr/main.lang.php b/locales/fr/main.lang.php new file mode 100644 index 0000000..a4c571d --- /dev/null +++ b/locales/fr/main.lang.php @@ -0,0 +1,52 @@ + \ No newline at end of file diff --git a/locales/fr/main.po b/locales/fr/main.po new file mode 100644 index 0000000..b1d3f75 --- /dev/null +++ b/locales/fr/main.po @@ -0,0 +1,76 @@ +# Language: Français +# Module: lastpostsExtend - 2013.11.12 +# Date: 2013-11-13 07:22:55 +# Translated with translater 2013.05.11 + +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Project-Id-Version: lastpostsExtend 2013.11.12\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2013-11-13T07:22:55+00:00\n" +"Last-Translator: Jean-Christian Denis\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Transfer-Encoding: 8bit\n" + +#: _widgets.php:34 +msgid "Last entries (Extended)" +msgstr "Derniers billets (étendu)" + +#: _widgets.php:37 +msgid "Extended list of entries" +msgstr "Liste étendue de billets" + +#: _widgets.php:48 +msgid "Post" +msgstr "Billet" + +#: _widgets.php:50 +msgid "Gallery" +msgstr "Galerie" + +#: _widgets.php:95 +msgid "Protection:" +msgstr "Protection :" + +#: _widgets.php:100 +msgid "only without password" +msgstr "seulement sans mot de passe" + +#: _widgets.php:101 +msgid "only with password" +msgstr "seulement avec mot de passe" + +#: _widgets.php:121 +msgid "Selected entries only" +msgstr "Billets sélectionnés seulement" + +#: _widgets.php:128 +msgid "Updated entries only" +msgstr "Billets mis à jour seulement" + +#: _widgets.php:137 +msgid "Limit to tags:" +msgstr "Limiter aux mots-clés :" + +#: _widgets.php:145 +msgid "Limit to words:" +msgstr "Limiter aux mots :" + +#: _widgets.php:182 +msgid "Show entries first image:" +msgstr "Afficher la première image du billet :" + +#: _widgets.php:197 +msgid "Show entries excerpt" +msgstr "Afficher l'extrait" + +#: _widgets.php:204 +msgid "Excerpt length:" +msgstr "Taille de l'extrait :" + +#: _widgets.php:211 +msgid "Show comments count" +msgstr "Afficher le nombre de commentaires" +