release 1.6 for dotclear 2.24

master
Jean-Christian Paul Denis 2022-12-15 22:26:10 +01:00
parent 838d9d6440
commit 62f92cd10e
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951
11 changed files with 645 additions and 580 deletions

View File

@ -1,15 +1,18 @@
v1.5 (23/04/2015) Pierre Van Glabeke : 1.6 - 2022.12.15
modification url support - update to dotclear 2.24
v1.4 (06/02/2015) Pierre Van Glabeke : 1.5 - 2015.04.23 - Pierre Van Glabeke :
modifications localisation - modification url support
v1.3 (14/12/2014) Pierre Van Glabeke : 1.4 - 2015.02.06 - Pierre Van Glabeke :
compatibilité dc2.7 - modifications localisation
v1.2 (17/02/2014) : 1.3 - 2014.12.14 - Pierre Van Glabeke :
reprise par Pierre Van Glabeke - compatibilité dc2.7
correction bug (waning_crescent_moon)
images refaites (merci à 999Diaoul) 1.2 2014.02.17 :
compatibilité dc2.6 - reprise par Pierre Van Glabeke
fin de ligne unix - correction bug (waning_crescent_moon)
- images refaites (merci à 999Diaoul)
- compatibilité dc2.6
- fin de ligne unix

View File

@ -1,7 +1,7 @@
GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE
Version 2, June 1991 Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/> Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed. of this license document, but changing it is not allowed.
@ -290,8 +290,8 @@ 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 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. the "copyright" line and a pointer to where the full notice is found.
{description} <one line to give the program's name and a brief idea of what it does.>
Copyright (C) {year} {fullname} Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -329,7 +329,7 @@ necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker. `Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989 <signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice Ty Coon, President of Vice
This General Public License does not permit incorporating your program into This General Public License does not permit incorporating your program into
@ -337,4 +337,3 @@ proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the 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 library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. Public License instead of this License.

View File

@ -1,2 +1,44 @@
# lunarPhase # README
Afficher les phases lunaire et autres données
[![Release](https://img.shields.io/github/v/release/JcDenis/lunarPhase)](https://github.com/JcDenis/lunarPhase/releases)
[![Date](https://img.shields.io/github/release-date/JcDenis/lunarPhase)](https://github.com/JcDenis/lunarPhase/releases)
[![Issues](https://img.shields.io/github/issues/JcDenis/lunarPhase)](https://github.com/JcDenis/lunarPhase/issues)
[![Dotclear](https://img.shields.io/badge/dotclear-v2.24-blue.svg)](https://fr.dotclear.org/download)
[![Dotaddict](https://img.shields.io/badge/dotaddict-official-green.svg)](https://plugins.dotaddict.org/dc2/details/lunarPhase)
[![License](https://img.shields.io/github/license/JcDenis/lunarPhase)](https://github.com/JcDenis/lunarPhase/blob/master/LICENSE)
## WHAT IS LUNARPHASE ?
_lunarPhase_ is a plugin for the open-source
web publishing software called Dotclear.
It shows lunar phases on a widget.
## REQUIREMENTS
_lunarPhase_ requires:
* content admin permissions to manage widgets
* Dotclear 2.24
## USAGE
First install _lunarPhase_, manualy from a zip package or from
Dotaddict repository. (See Dotclear's documentation to know how do this)
You should add widget to show lunar phases on your blog.
## LINKS
* License : [GNU GPL v2](https://www.gnu.org/licenses/old-licenses/lgpl-2.0.html)
* Source & contribution : [GitHub Page](https://github.com/JcDenis/lunarPhase)
* Packages & details : [Dotaddict Page](https://plugins.dotaddict.org/dc2/details/lunarPhase)
* Discuss and help : [Dotclear Forum](http://forum.dotclear.org/viewtopic.php?pid=332971#p332971)
## CONTRIBUTORS
* Tomtom (author)
* Pierre Van Glabeke
* Jean-Christian Denis
You are welcome to contribute to this code.

17
_admin.php 100644
View File

@ -0,0 +1,17 @@
<?php
/**
* @brief lunarPhase, a plugin for Dotclear 2
*
* @package Dotclear
* @subpackage Plugin
*
* @author Tomtom, Pierre Van Glabeke and Contributors
*
* @copyright Jean-Crhistian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('DC_CONTEXT_ADMIN')) {
return null;
}
require __DIR__ . '/_widgets.php';

View File

@ -1,28 +1,33 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# This file is part of lunarPhase, a plugin for Dotclear. * @brief lunarPhase, a plugin for Dotclear 2
# *
# Copyright (c) 2009-2015 Tomtom * @package Dotclear
# Contributor: Pierre Van Glabeke * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Tomtom, Pierre Van Glabeke and Contributors
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Crhistian Denis
# -- END LICENSE BLOCK ------------------------------------ * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/
if (!defined('DC_RC_PATH')) { return; } if (!defined('DC_RC_PATH')) {
return null;
}
$this->registerModule( $this->registerModule(
/* Name */ 'lunarPhase', 'lunarPhase',
/* Description */ 'Display the moon phases', 'Display the moon phases on a widget',
/* Author */ 'Tomtom, Pierre Van Glabeke', 'Tomtom, Pierre Van Glabeke and Contributors',
/* Verion */ '1.5', '1.6',
/* Properties */ [
array( 'requires' => [['core', '2.24']],
'permissions' => 'usage,contentadmin', 'permissions' => dcCore::app()->auth->makePermissions([
dcAuth::PERMISSION_USAGE,
dcAuth::PERMISSION_CONTENT_ADMIN,
]),
'type' => 'plugin', 'type' => 'plugin',
'dc_min' => '2.7',
'support' => 'http://forum.dotclear.org/viewtopic.php?pid=332971#p332971', 'support' => 'http://forum.dotclear.org/viewtopic.php?pid=332971#p332971',
'details' => 'http://plugins.dotaddict.org/dc2/details/lunarPhase' 'details' => 'https://plugins.dotaddict.org/dc2/details/' . basename(__DIR__),
) 'repository' => 'https://raw.githubusercontent.com/JcDenis/' . basename(__DIR__) . '/master/dcstore.xml',
]
); );

View File

@ -1,16 +1,50 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# This file is part of lunarPhase, a plugin for Dotclear. * @brief lunarPhase, a plugin for Dotclear 2
# *
# Copyright (c) 2009-2015 Tomtom * @package Dotclear
# Contributor: Pierre Van Glabeke * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Tomtom, Pierre Van Glabeke and Contributors
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Crhistian Denis
# -- END LICENSE BLOCK ------------------------------------ * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
if (!defined('DC_RC_PATH')) { return; } */
if (!defined('DC_RC_PATH')) {
return null;
}
$__autoload['lunarPhase'] = dirname(__FILE__).'/inc/class.lunarphase.php'; Clearbricks::lib()->autoload(['lunarPhase' => __DIR__ . '/inc/class.lunarphase.php']);
require dirname(__FILE__).'/_widgets.php'; // Register lunarphase CSS URL
dcCore::app()->url->register(
'lunarphase',
'lunarphase.css',
'^lunarphase\.css',
function ($args) {
$phases = [
'new_moon' => 'nm',
'waxing_crescent_moon' => 'wcm1',
'first_quarter_moon' => 'fqm',
'waxing_gibbous_moon' => 'wgm1',
'full_moon' => 'fm',
'waning_gibbous_moon' => 'wgm2',
'last_quarter_moon' => 'tqm',
'waning_crescent_moon' => 'wcm2',
];
header('Content-Type: text/css; charset=UTF-8');
echo "/* lunarphase widget style */\n";
foreach ($phases as $phase => $image) {
echo
sprintf(
'#sidebar .lunarphase ul li.%s{background:transparent url(%s) no-repeat left 0.2em;padding-left:2em;}',
$phase,
dcCore::app()->blog->getPF(basename(__dir__) . '/img/' . $image . '.png')
) . "\n";
}
exit;
}
);

View File

@ -1,203 +1,22 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# This file is part of lunarPhase, a plugin for Dotclear. * @brief lunarPhase, a plugin for Dotclear 2
# *
# Copyright (c) 2009-2015 Tomtom * @package Dotclear
# Contributor: Pierre Van Glabeke * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Tomtom, Pierre Van Glabeke and Contributors
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Crhistian Denis
# -- END LICENSE BLOCK ------------------------------------ * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
if (!defined('DC_RC_PATH')) { return; }
$core->addBehavior('publicHeadContent',array('lunarPhaseBehaviors','addCss'));
class lunarPhaseBehaviors
{
/**
This function add CSS file in the public header
*/ */
public static function addCss() if (!defined('DC_RC_PATH')) {
{ return null;
global $core;
$url = $core->blog->getQMarkURL().'pf='.basename(dirname(__FILE__)).'/style.css';
echo '<link rel="stylesheet" media="screen" type="text/css" href="'.$url.'" />';
}
} }
class lunarPhasePublic require __DIR__ . '/_widgets.php';
{
/**
Displays lunarphase widget
@param w <b>dcWidget</b> dcWidget object // Add public header for lunarphase css
@return <b>string</b> HTML code of widget dcCore::app()->addBehavior('publicHeadContent', function () {
*/ echo dcUtils::cssLoad(dcCore::app()->blog->url . dcCore::app()->url->getURLFor('lunarphase'));
public static function widget($w) });
{
global $core;
if ($w->offline)
return;
$lp = new lunarPhase();
if (($w->homeonly == 1 && $core->url->type != 'default') ||
($w->homeonly == 2 && $core->url->type == 'default')) {
return;
}
$res =
($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '');
# Get live content
$res .= lunarPhasePublic::getLive($w,$lp);
# Get prevision content
$res .= lunarPhasePublic::getPrevisions($w,$lp);
return $w->renderDiv($w->content_only,'lunarphase '.$w->class,'',$res);
}
/**
Returns "live" part of lunarphase widget
@param w <b>dcWidget</b> dcWidget object
@param lp <b>lunarPhaset</b> lunarPhase object
@return <b>string</b> Live HTML part
*/
public static function getLive($w,$lp)
{
$ul_mask = '<ul>%1$s</ul>';
$li_mask = '<li class="%2$s">%1$s</li>';
$live = $lp->getLive();
$res = '';
# Phase
if ($w->phase) {
$res .= sprintf($li_mask,$live['name'],$live['id']);
}
# Illumination
if ($w->illumination) {
$res .=
sprintf($li_mask,sprintf(__('Illumination: %s%%'),
lunarPhasePublic::formatValue('percent',$live['illumination'])),
'illumination');
}
# Moon's age
if ($w->age) {
$res .=
sprintf($li_mask,sprintf(__('Age of moon: %s days'),
lunarPhasePublic::formatValue('int',$live['age'])),
'age');
}
# Distance from earth
if ($w->dist_to_earth) {
$res .=
sprintf($li_mask,sprintf(__('Distance to earth: %s km'),
lunarPhasePublic::formatValue('int',$live['dist_to_earth'])),
'dist_to_earth');
}
# Distance from sun
if ($w->dist_to_sun) {
$res .=
sprintf($li_mask,sprintf(__('Distance to sun: %s km'),
lunarPhasePublic::formatValue('int',$live['dist_to_sun'])),
'dist_to_sun');
}
# Moon's angle
if ($w->moon_angle) {
$res .=
sprintf($li_mask,sprintf(__('Angle of moon: %s deg'),
lunarPhasePublic::formatValue('deg',$live['moon_angle'])),
'moon_angle');
}
# Sun's angle
if ($w->sun_angle) {
$res .=
sprintf($li_mask,sprintf(__('Angle of sun: %s deg'),
lunarPhasePublic::formatValue('deg',$live['sun_angle'])),
'sun_angle');
}
# Parallax
if ($w->parallax) {
$res .=
sprintf($li_mask,sprintf(__('Parallax: %s deg'),
lunarPhasePublic::formatValue('deg',$live['parallax'])),
'parallax');
}
if (strlen($res) > 0) {
return
'<h3>'.__('In live').'</h3>'.
sprintf($ul_mask,$res,'lunarphase');
}
}
/**
Returns "previsions" part of lunarphase widget
@param w <b>dcWidget</b> dcWidget object
@param lp <b>lunarPhaset</b> lunarPhase object
@return <b>string</b> previsions HTML part
*/
public static function getPrevisions($w,$lp)
{
$ul_mask = '<ul class="%2$s">%1$s</ul>';
$li_mask = '<li class="%2$s" title="%3$s">%1$s</li>';
$res = '';
if ($w->previsions) {
foreach ($lp->getPrevisions() as $k => $v) {
$res .= sprintf($li_mask,lunarPhasePublic::formatValue('date',$v['date']),$k,$v['name']);
}
}
if (strlen($res) > 0) {
return
'<h3>'.__('Previsions').'</h3>'.
sprintf($ul_mask,$res,'lunarphase');
}
}
/**
Returns value passed in argument with a correct format
@param type <b>string</b> Type of convertion
@param value <b>mixed</b> Value to convert
@return <b>mixed</b> Converted value
*/
public static function formatValue($type = '',$value)
{
$res = '';
$format = $GLOBALS['core']->blog->settings->system->date_format.' - ';
$format .= $GLOBALS['core']->blog->settings->system->time_format;
$tz = $GLOBALS['core']->blog->settings->system->blog_timezone;
switch ($type) {
case 'int':
$res = number_format($value,0);
break;
case 'float':
$res = number_format($value,2);
break;
case 'percent':
$res = number_format($value * 100,0);
break;
case 'date':
$res = dt::str($format,$value,$tz);
break;
case 'deg':
$res = number_format(($value * (180.0 / M_PI)),2);
break;
default:
$res = $value;
break;
}
return $res;
}
}

View File

@ -1,44 +1,214 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# This file is part of lunarPhase, a plugin for Dotclear. * @brief lunarPhase, a plugin for Dotclear 2
# *
# Copyright (c) 2009-2015 Tomtom * @package Dotclear
# Contributor: Pierre Van Glabeke * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Tomtom, Pierre Van Glabeke and Contributors
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Crhistian Denis
# -- END LICENSE BLOCK ------------------------------------ * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
if (!defined('DC_RC_PATH')) { return; } */
if (!defined('DC_RC_PATH')) {
return null;
}
$core->addBehavior('initWidgets',array('lunarPhaseWidgets','initWidgets')); dcCore::app()->addBehavior('initWidgets', ['lunarPhaseWidgets','initWidgets']);
class lunarPhaseWidgets class lunarPhaseWidgets
{ {
public static function initWidgets($w) public static function initWidgets($w)
{ {
$w->create('lunarphase',__('LunarPhase: moon phases'),array('lunarPhasePublic','widget'), $w->create(
'lunarphase',
__('LunarPhase: moon phases'),
['lunarPhaseWidgets','widget'],
null, null,
__('Display the moon phases')); __('Display the moon phases')
$w->lunarphase->setting('title',__('Title:'),__('Moon phases'));
$w->lunarphase->setting('phase',__('Display actual phase of moon'),1,'check');
$w->lunarphase->setting('illumination',__('Display actual illumination of moon'),1,'check');
$w->lunarphase->setting('age',__('Display actual age of moon'),1,'check');
$w->lunarphase->setting('dist_to_earth',__('Display actual distance between moon and earth'),1,'check');
$w->lunarphase->setting('dist_to_sun',__('Display actual distance between moon and sun'),1,'check');
$w->lunarphase->setting('moon_angle',__('Display actual angle of moon'),1,'check');
$w->lunarphase->setting('sun_angle',__('Display actual angle of sun'),1,'check');
$w->lunarphase->setting('parallax',__('Display actual parallax of moon'),1,'check');
$w->lunarphase->setting('previsions',__('Display all previsions for the next moon phases'),1,'check');
$w->lunarphase->setting('homeonly',__('Display on:'),0,'combo',
array(
__('All pages') => 0,
__('Home page only') => 1,
__('Except on home page') => 2
) )
->addTitle(__('Moon phases'))
->setting('phase', __('Display actual phase of moon'), 1, 'check')
->setting('illumination', __('Display actual illumination of moon'), 1, 'check')
->setting('age', __('Display actual age of moon'), 1, 'check')
->setting('dist_to_earth', __('Display actual distance between moon and earth'), 1, 'check')
->setting('dist_to_sun', __('Display actual distance between moon and sun'), 1, 'check')
->setting('moon_angle', __('Display actual angle of moon'), 1, 'check')
->setting('sun_angle', __('Display actual angle of sun'), 1, 'check')
->setting('parallax', __('Display actual parallax of moon'), 1, 'check')
->setting('previsions', __('Display all previsions for the next moon phases'), 1, 'check')
->addHomeOnly()
->addContentOnly()
->addClass()
->addOffline();
}
public static function widget($w)
{
if ($w->offline) {
return;
}
if (!$w->checkHomeOnly(dcCore::app()->url->type)) {
return;
}
$lp = new lunarPhase();
return $w->renderDiv(
$w->content_only,
'lunarphase ' . $w->class,
'',
($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '') .
self::getLive($w, $lp) .
self::getPrevisions($w, $lp)
); );
$w->lunarphase->setting('content_only',__('Content only'),0,'check'); }
$w->lunarphase->setting('class',__('CSS class:'),'');
$w->lunarphase->setting('offline',__('Offline'),0,'check'); /**
* Returns "live" part of lunarphase widget
*
* @param dcWidget $w dcWidget object
* @param lunarPhase $lp lunarPhase object
* @return string Live HTML part
*/
public static function getLive($w, $lp)
{
$li = '<li class="%2$s">%1$s</li>';
$live = $lp->getLive();
$res = '';
# Phase
if ($w->phase) {
$res .= sprintf($li, $live['name'], $live['id']);
}
# Illumination
if ($w->illumination) {
$res .= sprintf(
$li,
sprintf(
__('Illumination: %s%%'),
self::formatValue('percent', $live['illumination'])
),
'illumination'
);
}
# Moon's age
if ($w->age) {
$res .= sprintf(
$li,
sprintf(
__('Age of moon: %s days'),
self::formatValue('int', $live['age'])
),
'age'
);
}
# Distance from earth
if ($w->dist_to_earth) {
$res .= sprintf(
$li,
sprintf(
__('Distance to earth: %s km'),
self::formatValue('int', $live['dist_to_earth'])
),
'dist_to_earth'
);
}
# Distance from sun
if ($w->dist_to_sun) {
$res .= sprintf(
$li,
sprintf(
__('Distance to sun: %s km'),
self::formatValue('int', $live['dist_to_sun'])
),
'dist_to_sun'
);
}
# Moon's angle
if ($w->moon_angle) {
$res .= sprintf(
$li,
sprintf(
__('Angle of moon: %s deg'),
self::formatValue('deg', $live['moon_angle'])
),
'moon_angle'
);
}
# Sun's angle
if ($w->sun_angle) {
$res .= sprintf(
$li,
sprintf(
__('Angle of sun: %s deg'),
self::formatValue('deg', $live['sun_angle'])
),
'sun_angle'
);
}
# Parallax
if ($w->parallax) {
$res .= sprintf(
$li,
sprintf(
__('Parallax: %s deg'),
self::formatValue('deg', $live['parallax'])
),
'parallax'
);
}
return strlen($res) > 0 ?
sprintf('<h4>%s</h4><ul>%s</ul>', __('In live'), $res)
: '';
}
/**
* Returns "previsions" part of lunarphase widget
*
* @param dcWidget $w dcWidget object
* @param lunarPhase $lp lunarPhase object
* @return string Previsions HTML part
*/
public static function getPrevisions($w, $lp)
{
$li = '<li class="%s" title="%s">%s</li>';
$res = '';
if ($w->previsions) {
foreach ($lp->getPrevisions() as $k => $v) {
$res .= sprintf($li, $k, $v['name'], self::formatValue('date', (int) $v['date']));
}
}
return strlen($res) > 0 ?
sprintf('<h4>%s</h4><ul class="lunarphase">%s</ul>', __('Previsions'), $res)
: '';
}
/**
* Returns value passed in argument with a correct format
*
* @param string $type Type of convertion
* @param mixed $value Value to convert
* @return mixed Converted value
*/
public static function formatValue($type, $value)
{
$res = '';
$format = dcCore::app()->blog->settings->system->date_format . ' - ';
$format .= dcCore::app()->blog->settings->system->time_format;
$tz = dcCore::app()->blog->settings->system->blog_timezone;
return match ($type) {
'int' => number_format($value, 0),
'float' => number_format($value, 2),
'percent' => number_format($value * 100, 0),
'date' => dt::str($format, $value, $tz),
'deg' => number_format(($value * (180.0 / M_PI)), 2),
default => $value,
};
} }
} }

13
dcstore.xml 100644
View File

@ -0,0 +1,13 @@
<?xml version="1.0"?>
<modules xmlns:da="http://dotaddict.org/da/">
<module id="lunarPhase">
<name>lunarPhase</name>
<version>1.6</version>
<author>Tomtom, Pierre Van Glabeke and Contributors</author>
<desc>Display the moon phases on a widget</desc>
<file>https://github.com/JcDenis/lunarPhase/releases/download/v1.6/plugin-lunarPhase.zip</file>
<da:dcmin>2.24</da:dcmin>
<da:details>https://plugins.dotaddict.org/dc2/details/lunarPhase</da:details>
<da:support>http://forum.dotclear.org/viewtopic.php?pid=332971#p332971</da:support>
</module>
</modules>

View File

@ -1,45 +1,49 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# This file is part of lunarPhase, a plugin for Dotclear. * @brief lunarPhase, a plugin for Dotclear 2
# *
# Copyright (c) 2009-2015 Tomtom * @package Dotclear
# Contributor: Pierre Van Glabeke * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Tomtom, Pierre Van Glabeke and Contributors
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Crhistian Denis
# -- END LICENSE BLOCK ------------------------------------ * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
if (!defined('DC_RC_PATH')) {return;} */
if (!defined('DC_RC_PATH')) {
return null;
}
class lunarPhase class lunarPhase
{ {
# Astronomical constants. # Astronomical constants.
const epoch = 2444238.5; # 1980 January 0.0 public const epoch = 2444238.5; # 1980 January 0.0
# Constants defining the Sun's apparent orbit. # Constants defining the Sun's apparent orbit.
const elonge = 278.833540; # ecliptic longitude of the Sun at epoch 1980.0 public const elonge = 278.833540; # ecliptic longitude of the Sun at epoch 1980.0
const elongp = 282.596403; # ecliptic longitude of the Sun at perigee public const elongp = 282.596403; # ecliptic longitude of the Sun at perigee
const eccent = 0.016718; # eccentricity of Earth's orbit public const eccent = 0.016718; # eccentricity of Earth's orbit
const sunsMax = 1.495985e8; # semi-major axis of Earth's orbit, km public const sunsMax = 1.495985e8; # semi-major axis of Earth's orbit, km
const sunAngSiz = 0.533128; # sun's angular size, degrees, at semi-major axis distance public const sunAngSiz = 0.533128; # sun's angular size, degrees, at semi-major axis distance
# Elements of the Moon's orbit, epoch 1980.0. # Elements of the Moon's orbit, epoch 1980.0.
const mmLong = 64.975464; # moon's mean longitude at the epoch public const mmLong = 64.975464; # moon's mean longitude at the epoch
const mmLongp = 349.383063; # mean longitude of the perigee at the epoch public const mmLongp = 349.383063; # mean longitude of the perigee at the epoch
const mlNode = 151.950429; # mean longitude of the node at the epoch public const mlNode = 151.950429; # mean longitude of the node at the epoch
const mInc = 5.145396; # inclination of the Moon's orbit public const mInc = 5.145396; # inclination of the Moon's orbit
const mEcc = 0.054900; # eccentricity of the Moon's orbit public const mEcc = 0.054900; # eccentricity of the Moon's orbit
const mAngSiz = 0.5181; # moon's angular size at distance a from Earth public const mAngSiz = 0.5181; # moon's angular size at distance a from Earth
const msMax = 384401.0; # semi-major axis of Moon's orbit in km public const msMax = 384401.0; # semi-major axis of Moon's orbit in km
const mParallax = 0.9507; # parallax at distance a from Earth public const mParallax = 0.9507; # parallax at distance a from Earth
const synodic = 29.53058868; # synodic month (new Moon to new Moon) public const synodic = 29.53058868; # synodic month (new Moon to new Moon)
protected $live; protected $live;
protected $previsions; protected $previsions;
public function __construct() public function __construct()
{ {
$this->live = new ArrayObject; $this->live = new ArrayObject();
$this->previsions = new ArrayObject; $this->previsions = new ArrayObject();
$this->setLive(); $this->setLive();
$this->setPrevisions(); $this->setPrevisions();
@ -102,35 +106,28 @@ class lunarPhase
private function setPhase() private function setPhase()
{ {
if ($this->live['age'] >= self::synodic || $this->live['age'] <= self::synodic/8) { if ($this->live['age'] >= self::synodic || $this->live['age'] <= self::synodic / 8) {
$this->live['id'] = 'new_moon'; $this->live['id'] = 'new_moon';
$this->live['name'] = __('New moon'); $this->live['name'] = __('New moon');
} } elseif ($this->live['age'] >= self::synodic / 8 && $this->live['age'] <= self::synodic / 4) {
elseif ($this->live['age'] >= self::synodic/8 && $this->live['age'] <= self::synodic/4) {
$this->live['id'] = 'waxing_crescent_moon'; $this->live['id'] = 'waxing_crescent_moon';
$this->live['name'] = __('Waxing crescent moon'); $this->live['name'] = __('Waxing crescent moon');
} } elseif ($this->live['age'] >= self::synodic / 4 && $this->live['age'] <= self::synodic * 3 / 8) {
elseif ($this->live['age'] >= self::synodic/4 && $this->live['age'] <= self::synodic*3/8) {
$this->live['id'] = 'first_quarter_moon'; $this->live['id'] = 'first_quarter_moon';
$this->live['name'] = __('First quarter moon'); $this->live['name'] = __('First quarter moon');
} } elseif ($this->live['age'] >= self::synodic * 3 / 8 && $this->live['age'] <= self::synodic / 2) {
elseif ($this->live['age'] >= self::synodic*3/8 && $this->live['age'] <= self::synodic/2) {
$this->live['id'] = 'waxing_gibbous_moon'; $this->live['id'] = 'waxing_gibbous_moon';
$this->live['name'] = __('Waxing gibbous moon'); $this->live['name'] = __('Waxing gibbous moon');
} } elseif ($this->live['age'] >= self::synodic / 2 && $this->live['age'] <= self::synodic * 5 / 8) {
elseif ($this->live['age'] >= self::synodic/2 && $this->live['age'] <= self::synodic*5/8) {
$this->live['id'] = 'full_moon'; $this->live['id'] = 'full_moon';
$this->live['name'] = __('Full moon'); $this->live['name'] = __('Full moon');
} } elseif ($this->live['age'] >= self::synodic * 5 / 8 && $this->live['age'] <= self::synodic * 3 / 4) {
elseif ($this->live['age'] >= self::synodic*5/8 && $this->live['age'] <= self::synodic*3/4) {
$this->live['id'] = 'waning_gibbous_moon'; $this->live['id'] = 'waning_gibbous_moon';
$this->live['name'] = __('Waning gibbous moon'); $this->live['name'] = __('Waning gibbous moon');
} } elseif ($this->live['age'] >= self::synodic * 3 / 4 && $this->live['age'] <= self::synodic * 7 / 8) {
elseif ($this->live['age'] >= self::synodic*3/4 && $this->live['age'] <= self::synodic*7/8) {
$this->live['id'] = 'last_quarter_moon'; $this->live['id'] = 'last_quarter_moon';
$this->live['name'] = __('Last quarter moon'); $this->live['name'] = __('Last quarter moon');
} } elseif ($this->live['age'] >= self::synodic * 7 / 8 && $this->live['age'] <= self::synodic) {
elseif ($this->live['age'] >= self::synodic*7/8 && $this->live['age'] <= self::synodic) {
$this->live['id'] = 'waning_crescent_moon'; $this->live['id'] = 'waning_crescent_moon';
$this->live['name'] = __('Waning crescent moon'); $this->live['name'] = __('Waning crescent moon');
} }
@ -138,42 +135,42 @@ class lunarPhase
private function setPrevisions() private function setPrevisions()
{ {
$ts_day = 24*60*60; $ts_day = 24 * 60 * 60;
$ts_synodic = self::synodic * $ts_day; $ts_synodic = self::synodic * $ts_day;
$start = time() - $this->live['age'] * $ts_day; $start = time() - $this->live['age'] * $ts_day;
$this->previsions['waxing_crescent_moon'] = array( $this->previsions['waxing_crescent_moon'] = [
'name' => __('Waxing crescent moon'), 'name' => __('Waxing crescent moon'),
'date' => $start + $ts_synodic / 8 'date' => $start + $ts_synodic / 8,
); ];
$this->previsions['first_quarter_moon'] = array( $this->previsions['first_quarter_moon'] = [
'name' => __('First quarter moon'), 'name' => __('First quarter moon'),
'date' => $start + $ts_synodic / 4 'date' => $start + $ts_synodic / 4,
); ];
$this->previsions['waxing_gibbous_moon'] = array( $this->previsions['waxing_gibbous_moon'] = [
'name' => __('Waxing gibbous moon'), 'name' => __('Waxing gibbous moon'),
'date' => $start + $ts_synodic * 3 / 8 'date' => $start + $ts_synodic * 3 / 8,
); ];
$this->previsions['full_moon'] = array( $this->previsions['full_moon'] = [
'name' => __('Full moon'), 'name' => __('Full moon'),
'date' => $start + $ts_synodic / 2 'date' => $start + $ts_synodic / 2,
); ];
$this->previsions['waning_gibbous_moon'] = array( $this->previsions['waning_gibbous_moon'] = [
'name' => __('Waning gibbous moon'), 'name' => __('Waning gibbous moon'),
'date' => $start + $ts_synodic * 5 / 8 'date' => $start + $ts_synodic * 5 / 8,
); ];
$this->previsions['last_quarter_moon'] = array( $this->previsions['last_quarter_moon'] = [
'name' => __('Last quarter moon'), 'name' => __('Last quarter moon'),
'date' => $start + $ts_synodic * 3 / 4 'date' => $start + $ts_synodic * 3 / 4,
); ];
$this->previsions['waning_crescent_moon'] = array( $this->previsions['waning_crescent_moon'] = [
'name' => __('Waning crescent moon'), 'name' => __('Waning crescent moon'),
'date' => $start + $ts_synodic * 7 / 8 'date' => $start + $ts_synodic * 7 / 8,
); ];
$this->previsions['new_moon'] = array( $this->previsions['new_moon'] = [
'name' => __('New moon'), 'name' => __('New moon'),
'date' =>$start + $ts_synodic 'date' => $start + $ts_synodic,
); ];
} }
private function fixAngle($x) private function fixAngle($x)
@ -203,11 +200,11 @@ class lunarPhase
$m = $this->toRad($m); $m = $this->toRad($m);
$e = $m; $e = $m;
while (abs($delta) > $EPSILON) while (abs((int) $delta) > $EPSILON) {
{
$delta = $e - $ecc * sin($e) - $m; $delta = $e - $ecc * sin($e) - $m;
$e -= $delta / (1 - $ecc * cos($e)); $e -= $delta / (1 - $ecc * cos($e));
} }
return ($e); return ($e);
} }
} }

View File

@ -1,133 +1,99 @@
msgid "" msgid ""
msgstr "" msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: lunarPhase 1.1-RC2\n" "Project-Id-Version: lunarPhase 1.6\n"
"POT-Creation-Date: \n" "POT-Creation-Date: \n"
"PO-Revision-Date: 2010-09-30T22:49:45+00:00\n" "PO-Revision-Date: 2022-12-15T21:10:10+00:00\n"
"Last-Translator: Thomas Bouron\n" "Last-Translator: Jean-Crhistian Denis\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
msgid "LunarPhase: moon phases"
msgstr "LunarPhase : phases de la Lune"
msgid "Display the moon phases" msgid "Display the moon phases"
msgstr "Afficher les phases de la Lune et autres données" msgstr "Afficher les phases de la Lune et autres données"
#: _public.php:84
msgid "Illumination: %s%%"
msgstr "Illumination : %s%%"
#: _public.php:91
msgid "Age of moon: %s days"
msgstr "Age de la Lune : %s jours"
#: _public.php:98
msgid "Distance to earth: %s km"
msgstr "Distance à la Terre : %s km"
#: _public.php:105
msgid "Distance to sun: %s km"
msgstr "Distance au Soleil : %s km"
#: _public.php:112
msgid "Angle of moon: %s deg"
msgstr "Angle de la Lune : %s deg"
#: _public.php:119
msgid "Angle of sun: %s deg"
msgstr "Angle du Soleil : %s deg"
#: _public.php:126
msgid "Parallax: %s deg"
msgstr "Parallaxe : %s deg"
#: _public.php:133
msgid "In live"
msgstr "En direct"
#: _public.php:159
msgid "Previsions"
msgstr "Prévisions"
#: _widgets.php:20
msgid "LunarPhase: moon phases"
msgstr "LunarPhase : phases de la Lune"
#: _widgets.php:22
msgid "Moon phases" msgid "Moon phases"
msgstr "Phases de la Lune" msgstr "Phases de la Lune"
#: _widgets.php:24
msgid "Display actual phase of moon" msgid "Display actual phase of moon"
msgstr "Afficher la phase actuelle de la Lune" msgstr "Afficher la phase actuelle de la Lune"
#: _widgets.php:25
msgid "Display actual illumination of moon" msgid "Display actual illumination of moon"
msgstr "Afficher le taux d'illumination actuel de la Lune" msgstr "Afficher le taux d'illumination actuel de la Lune"
#: _widgets.php:26
msgid "Display actual age of moon" msgid "Display actual age of moon"
msgstr "Afficher l'âge actuel de la Lune" msgstr "Afficher l'âge actuel de la Lune"
#: _widgets.php:27
msgid "Display actual distance between moon and earth" msgid "Display actual distance between moon and earth"
msgstr "Afficher la distance actuelle entre la Terre et la Lune" msgstr "Afficher la distance actuelle entre la Terre et la Lune"
#: _widgets.php:28
msgid "Display actual distance between moon and sun" msgid "Display actual distance between moon and sun"
msgstr "Afficher la distance actuelle entre le Soleil et la Lune" msgstr "Afficher la distance actuelle entre le Soleil et la Lune"
#: _widgets.php:29
msgid "Display actual angle of moon" msgid "Display actual angle of moon"
msgstr "Afficher l'angle actuel de la Lune" msgstr "Afficher l'angle actuel de la Lune"
#: _widgets.php:30
msgid "Display actual angle of sun" msgid "Display actual angle of sun"
msgstr "Afficher l'angle actuel du Soleil" msgstr "Afficher l'angle actuel du Soleil"
#: _widgets.php:31
msgid "Display actual parallax of moon" msgid "Display actual parallax of moon"
msgstr "Afficher la parallaxe actuelle de la Lune" msgstr "Afficher la parallaxe actuelle de la Lune"
#: _widgets.php:32
msgid "Display all previsions for the next moon phases" msgid "Display all previsions for the next moon phases"
msgstr "Afficher toutes les prévisions des prochaines lunaisons" msgstr "Afficher toutes les prévisions des prochaines lunaisons"
#: inc/class.lunarphase.php:107 msgid "Illumination: %s%%"
#: inc/class.lunarphase.php:174 msgstr "Illumination : %s%%"
msgid "Age of moon: %s days"
msgstr "Age de la Lune : %s jours"
msgid "Distance to earth: %s km"
msgstr "Distance à la Terre : %s km"
msgid "Distance to sun: %s km"
msgstr "Distance au Soleil : %s km"
msgid "Angle of moon: %s deg"
msgstr "Angle de la Lune : %s deg"
msgid "Angle of sun: %s deg"
msgstr "Angle du Soleil : %s deg"
msgid "Parallax: %s deg"
msgstr "Parallaxe : %s deg"
msgid "In live"
msgstr "En direct"
msgid "Previsions"
msgstr "Prévisions"
msgid "New moon" msgid "New moon"
msgstr "Nouvelle lune" msgstr "Nouvelle lune"
#: inc/class.lunarphase.php:111
#: inc/class.lunarphase.php:146
msgid "Waxing crescent moon" msgid "Waxing crescent moon"
msgstr "Lune croissante" msgstr "Lune croissante"
#: inc/class.lunarphase.php:115
#: inc/class.lunarphase.php:150
msgid "First quarter moon" msgid "First quarter moon"
msgstr "Premier quartier" msgstr "Premier quartier"
#: inc/class.lunarphase.php:119
#: inc/class.lunarphase.php:154
msgid "Waxing gibbous moon" msgid "Waxing gibbous moon"
msgstr "Lune gibbeuse croissante" msgstr "Lune gibbeuse croissante"
#: inc/class.lunarphase.php:123
#: inc/class.lunarphase.php:158
msgid "Full moon" msgid "Full moon"
msgstr "Pleine lune" msgstr "Pleine lune"
#: inc/class.lunarphase.php:127
#: inc/class.lunarphase.php:162
msgid "Waning gibbous moon" msgid "Waning gibbous moon"
msgstr "Lune gibbeuse décroissante" msgstr "Lune gibbeuse décroissante"
#: inc/class.lunarphase.php:131
#: inc/class.lunarphase.php:166
msgid "Last quarter moon" msgid "Last quarter moon"
msgstr "Dernier quartier" msgstr "Dernier quartier"
#: inc/class.lunarphase.php:135
#: inc/class.lunarphase.php:170
msgid "Waning crescent moon" msgid "Waning crescent moon"
msgstr "Lune décroissante" msgstr "Lune décroissante"