2 rcs_id('$Id PhpWeather.php 2002-08-26 15:30:13 rurban$');
4 * This plugin requires a separate program called PhpWeather. For more
5 * information and to download PhpWeather, see:
7 * http://sourceforge.net/projects/phpweather/
11 * <?plugin PhpWeather ?>
12 * <?plugin PhpWeather menu=true ?>
13 * <?plugin PhpWeather icao=KJFK ?>
14 * <?plugin PhpWeather lang=en ?>
15 * <?plugin PhpWeather units=only_metric ?>
16 * <?plugin PhpWeather icao||=CYYZ lang||=en menu=true ?>
18 * If you want a menu, and you also want to change the default station
19 * or language, then you have to use the ||= form, or else the user
20 * wont be able to change the station or language.
22 * The units argument should be one of only_metric, only_imperial,
23 * both_metric, or both_imperial.
26 // We require the base class from PHP Weather, adjust this to match
27 // the location of PhpWeather on your server:
28 $WEATHER = $_SERVER['DOCUMENT_ROOT'] . '/phpweather/phpweather.php';
29 if(! @include_once($WEATHER)) {
30 if(!in_array($WEATHER, get_included_files()) ) {
31 $error = sprintf(_("Could not open file %s."), "'$WEATHER'") . " ";
32 $error .= sprintf(_("Make sure %s is installed and properly configured."),
34 trigger_error($error);
38 class WikiPlugin_PhpWeather
42 return _("PhpWeather");
45 function getDescription () {
46 return _("The PhpWeather plugin provides weather reports from the Internet.");
48 function getDefaultArguments() {
50 return array('icao' => 'EKAH',
54 'units' => 'both_metric');
57 function run($dbi, $argstr, $request) {
58 // When 'phpweather/phpweather.php' is not installed then
59 // PHPWEATHER_BASE_DIR will be undefined
60 if (!defined('PHPWEATHER_BASE_DIR'))
61 return fmt("Plugin %s failed.", $this->getName()); //early return
63 require_once(PHPWEATHER_BASE_DIR . '/output/pw_images.php');
64 require_once(PHPWEATHER_BASE_DIR . '/pw_utilities.php');
66 extract($this->getArgs($argstr, $request));
69 $w = new phpweather(); // Our weather object
72 /* We assign the ICAO to the weather object: */
74 if (!$w->get_country_code()) {
75 /* The country code couldn't be resolved, so we
76 * shouldn't use the ICAO: */
77 trigger_error(sprintf(_("The ICAO '%s' wasn't recognized."),
78 $icao), E_USER_NOTICE);
85 /* We check and correct the language if necessary: */
86 //if (!in_array($lang, array_keys($w->get_languages('text')))) {
87 if (!in_array($lang, array_keys(get_languages('text')))) {
88 trigger_error(sprintf(_("%s does not know about the language '%s', using 'en' instead."),
89 $this->getName(), $lang), E_USER_NOTICE);
93 $class = "pw_text_$lang";
94 require_once(PHPWEATHER_BASE_DIR . "/output/$class.php");
97 $t->set_pref_units($units);
98 $i = new pw_images($w);
100 $i_temp = HTML::img(array('src' => $i->get_temp_image()));
101 $i_wind = HTML::img(array('src' => $i->get_winddir_image()));
102 $i_sky = HTML::img(array('src' => $i->get_sky_image()));
104 $m = $t->print_pretty();
106 $m_td = HTML::td(HTML::p(new RawXml($m)));
109 $i_tr->pushContent(HTML::td($i_temp));
110 $i_tr->pushContent(HTML::td($i_wind));
112 $i_table = HTML::table($i_tr);
113 $i_table->pushContent(HTML::tr(HTML::td(array('colspan' => '2'),
117 $tr->pushContent($m_td);
118 $tr->pushContent(HTML::td($i_table));
120 $html->pushContent(HTML::table($tr));
124 /* We make a menu if asked to, or if $icao is empty: */
125 if ($menu || empty($icao)) {
127 $form_arg = array('action' => $request->getURLtoSelf(),
130 /* The country box is always part of the menu: */
131 $p1 = HTML::p(new RawXml(get_countries_select($w, $cc)));
133 /* We want to save the language: */
134 $p1->pushContent(HTML::input(array('type' => 'hidden',
137 /* And also the ICAO: */
138 $p1->pushContent(HTML::input(array('type' => 'hidden',
142 $caption = (empty($cc) ? _("Submit country") : _("Change country"));
143 $p1->pushContent(HTML::input(array('type' => 'submit',
144 'value' => $caption)));
146 $html->pushContent(HTML::form($form_arg, $p1));
149 /* We have selected a country, now display a list with
150 * the available stations in that country: */
153 /* We need the country code after the form is submitted: */
154 $p2->pushContent(HTML::input(array('type' => 'hidden',
158 $p2->pushContent(new RawXml(get_stations_select($w, $cc, $icao)));
159 $p2->pushContent(new RawXml(get_languages_select($w, $lang)));
160 $p2->pushContent(HTML::input(array('type' => 'submit',
161 'value' => 'Submit location')));
163 $html->pushContent(HTML::form($form_arg, $p2));
178 // c-hanging-comment-ender-p: nil
179 // indent-tabs-mode: nil