From ed9adf976f6b7a7032ab6787a415a608a3b46475 Mon Sep 17 00:00:00 2001 From: tony baldwin Date: Mon, 11 Feb 2013 03:31:13 -0500 Subject: [PATCH 1/6] adding current temp/weather plugin --- curtemp.tgz | Bin 0 -> 30720 bytes curtemp/curtemp.css | 10 ++ curtemp/curtemp.php | 101 +++++++++++++++++++ curtemp/getweather.php | 222 +++++++++++++++++++++++++++++++++++++++++ etherpadlite.tar.gz | Bin 0 -> 38196 bytes 5 files changed, 333 insertions(+) create mode 100644 curtemp.tgz create mode 100644 curtemp/curtemp.css create mode 100644 curtemp/curtemp.php create mode 100644 curtemp/getweather.php create mode 100644 etherpadlite.tar.gz diff --git a/curtemp.tgz b/curtemp.tgz new file mode 100644 index 0000000000000000000000000000000000000000..6d5084beb9b40eb1d839d5d7a97c512abcf2556f GIT binary patch literal 30720 zcmeHPdvn{ime0S|r@-a9mE2JzJCC;GM9Fn*Iq_b{&e%$_ohGB9BuHXSky?_n>@@xE z`#T2!2~d=i?xr){xk@{+i36NB&WlopizJh?dHdd9_-7Y?etP`)9{t3h@=spdd$70r z@45DW_~^lp_r&fu=cEGRzq$Rlo<4`kYwaI?sEHrMnLm^J z;&729GRi~`fk7sIwn!uak7PPbf_WCi(Z0Bx#>-T|Yj`Jx5WQ23<3ub{nbcDe#zUXB z3;dr=WsrzSX3IFa5_5mTIN!-6Wqf(7UAG!7;W zy7pn8VnAc3X>LtD|E(`0e-O(0&dyG43zrh{C4!G^ZTt71QC#@7KFwy~RQjX(N73qt z`qMCou0$fkj+bV)p-iVzW}Xn)?Ob-eOx|SeVVZhkn#gg-tBaN(RK(H1Pvs(^>)#Uf zcJ<}PQ94rh#7vF?zvCfZc%uD`7QGM2hsY!5+HHzp0!WwA$8U+C>mf$5Oa%@wkRuyF zGT*+P%rgP?ETjlh1V1^FBMy)zGV;#lG#E~8)KFb2vRI5|1_04DL`Qz+GXk^VMkpc!gp>wzwO98jK_^Mn~kfQvR;4js`!Wkh^-DOF@t065nXbA)F)mPTLn)eEuwO z&2Jjp{Ws^Az5Ev6H>vG@x){umJ>BcvZf{{jwFg=uVdmfTwSkZ$bu3Yoel^?r&Zdt$ zi2Xb%^#R0r+@3O1r}`8$quJu)4rf6$Uu2cEJgd6! zM1;P`C8@Hyt~PAF<4~i_rC0{YWscT zQsUWDWn5JxDriZnatg}}o7_RoF)g-svrC=upaE2kZJns|I))>7#iZeHxujjU?G{qs zmesrGKM(gFKYFa^Kf8~9dc24E-=n>~-Oc>x+ghO-n;HMqj;Wnd^B>n2YGx+$(ob&1 z`)QEL+IbRSy5Wc7+RSfW`?q56K~p@~-F;j;_0vpXtP+d^IoiiiXM!o4_=%xE*J_9H z{1ynNnP?pD(1}O)@z>A7B2ep1(J&zxOcH-az0)|65=F{5Tl$H7B5vaa7b^)`wiLA; zq6Av3OrRZV$4QN8-_pV&8lhLCN(Y0VSxRL9J-j@7i#j2~%qkRb7K1Ptic=IgQ7UUb z=+X+h%#j$}^7dn*eyOR8;}}>uBeiNPj28TiPzdnpX*>t{sgF#PiDiIpaUf|#HeQ6y z8aNm4PkOJ;-}c18*)QV#!NtYFS?`x8*oj#fpz>NOJi%-pLZJdGNc=D@3w@vgg8(`ZM_-{ z??E&S7u2;*=3y(l$yD2m3|t$@%n!m8Dj;mrESvAQ+sNnC_oc02JZqz=;)nLlENttB zwawk@B1NAM5>$w=A{``pYikl;x2YMUIUMD-emqFqwSy3~Y6_CIElt$k?}swUu&W9N zYH|qIOqn6_Lnu_jabWC>JVW<`D3h5fboSQ}k?TYluM+19e*qlsrUi*>HJV6bZt(Wv zl!Ye0`!7^uG&rbjV+SS^9nZ+HT()dER`60!OK52t0i-W5*$_aGV-8T+rnT*0Hko5S zQQ%cAF6&a`ZwE7IKW&ePd`2TQRWq*%TmrNL1X_yEt25FZD*fOCvxD8}gCZjfL`FB4Q+tYBtc-pC-$@P0w%@ zIsRt;gu>bO%%As_OA`jpFdU5$7tq`C6wjaV;B7%|3FFsz@m8RoiK&0hm@()}ZkY{# zKoJ@-Y&az*=!z3pCe6eqPl7!4-IIrt=+LM7i9bZ%736;f)qK5A>uZSTn~t!@%jvx#M`1lv z7;RZroQFQFNERThFgO^Y7?!5-5SKl;R%2Oq09u9Kkk<57(J?8HV3vs-rSMI{FlkZT zK&}mltajUY@S7ZF7J{Tt#fyz5m!^kf=Pxe17w`CP_j@O=yYO2XB3P+HMUBV7C}j>) zJE*#X9Z+RZ;c?0JR!x)WbsN`XKR3nC`;Q+Alu(C9J&zB(mvvl^NzCpVlZ_&zV&Y$; z^2H#?kk#pqT%xp^!*kU@Wrc_*C|dIiKE*9GFWXr#Q>rdzN+^n89;&5~M^gz+VPl8_ zO1GftD55v#eyzr}bMr|3tA_BXs=^1aM9CV6SL7%Q95 zHgy|_H$}7wV~1gkm#aEv#j}}DoEY-1;+r1+6HE{aH+u|w97y>^2hiekK5L8&_nMiF-h6u|a`-7XHpNMOri6&%thm~orG&~*`Hg1( zASWoUb*`Ir_TT=*7p-jfV=mrVLIQCWz_>_XOWbz2;Sz?>eVM@PHx_c>53l%CC1FC< z@IrAcert+f#AH7Z2VN5#XEE(BZph9~Yx@(8+4LKmiU82bebqz)bCvYV9ibB-W9dLE zct>E+=`9>am~ST{P)$r$;?&R5=<2$*g*Ynx;k2RZX7Z!$tIo6SVCQ#!k<*bk^DrJk zNby^uev--!5XG;F|_Eqb* z`2+=>kz8$WUatiZKW47u{2& z%y-@XtGBODj?nqiiyX*{aB_g+4UxkasNvAkBNQVj0Cd;cR>%8}8X-D=g!YoU8I=#Y zlww2UwFr5(N>V_tZ=m{I3L0}nB5Fm9|GYc7JW)+~|MdwB1zj9?#A3w`vZJeiD5V-% z{o_B%d)Fgv?EO$djrrMW;e|I!sMLsEC?9EIq)WCn+JAp?cGQ3U<`pUZcct}GU7@v< zqav3XpaBy&gf8Awb(l6g$_OwmK_uuC)!s{jAvt1R3Ko9|) zVmnvb9P`O9t%t6ikqN&Zl_q{)|cwl7i#p);24%Fv54E zvR(@uY*2knna*a05xMLrLFOjmfx1U4aWErHYo?#uM1oH}SsXlMO-VG>Rxj2J* zEAI;J$c8I}lmC#)o;D?`O3BPyVnuIYvg(vdi4pNyO`WQzA(>b)m z2+RtR9!+0^eMd9H-vqQb|F~=)IC>Fm!u>EvPg+-1vy}~CaI^MC5&vbqUR_ZZ6 z3x2e5DS*AgTMDH4;bO_5GnPxDb0Cgs>_^O}IO06o*d4$cl<6=dlo%v93Zds*KQ>Nx z;~J##HS6OX{RmB%!DIfbjVoVVgC-hJSgrA-{hDUdP-#4&zsUj=GS%bd6#W&#i+Umk zsmn4?m_^~^W0)W4v%r9y`7RjJhg`|_4mKBLV|F1nl`_Pk=mP0;!WcO@94Nj{xyN&O z`7BSZblf4G#aH<7Q^&icUmVc*Q{uDkjH)htaAFC2lmwqXp=0`tH$C+3DW|MA zmR5`HC7$&5(rU5Y#p`M#hnejb*pViflPo8gAiR+w-cgX(D+b*)#f7_OKUw&J!5G8d z@fjmDeo2;Q^r;XRL{EnaCc1t|9K6EY5JJQ4Jw3E9Be-Fi#r1H-?s~XkP!r-Gdd*SK zEVx;Q z(p$>8l^J6b8Lak-r769Ke>l?ED{8;JV))X>l}$>E>Qrfw512K>TWQfEr*}Fsrc)JG zl|(w28&su5The@|v&RibN)U7BwL&yM`n+B&?QtGmoDMl88k0vYM>eM|Xa(mM)WK_`rn7Fnimqd+ELE0r!nv`Ov#6D-n5u%Tu320uN$=dU4zq>DId2qT z%lH`)aUCgLsjefV!43(Kz5}6xuEVFG4m!)7N(odU(JFS%l+Eh^Erjc|WMN*n#a7_D zJ=Mx~n6c56#Ir$Fdge8IQ|Y`VXXSCufvl-2@ZFZEfVw(^2RL%-GGo1)ak;b3E%a#z zqvjmvEcM@s-`aO4A#0yQvC5p9v%4-3IMfQhlWLU_7`xK-mn6%p8i!>^NoAWj4#N6( z&RPcjYW+J1%J|pmwM=N;KHJxgW=zs?2;X5SXWt6KlGCoht8Ii{er0C~Q&|<2i0lhl zIE}-x5&KJ~R6gS#EupX2vc6kzFtJmu-@DFJ*PmE-FV>uJad9V%6-*Q;Jz|s6^>CJ`S(1)gp@U%{qRI zf>X!#qiqz}D^4PR6t~~wrFtSR=Xe3`U>)HFE}7|wzSaS6wG)V5Gx1M9UQ!_XEX=BY zbPnn@I?(3d@l}(A$IdHDF1JkLlBd^3lg^U$;2vZu?m=hCdaw>Unwa4&4QawSvii8D z(C^9k#Zc`sRkHKv??^?E%G?A^E$gO_2lKuish#_3cmf6;*+^+2b(wvwacDafWxr_}3w_ z={|kEYkq^rnV;Y*WB2hHpe&wY`7y2jQIOaFxWoz`d_bUr?ak6g0~-x&G_cXYMgtoS zY&5XZz(xZb4Qw>9(ZEIn8x3qUu+hLq0~-x&G_cXYMgtoSY&5XZz(xZb4Qw>9(ZEIn j8x3qUu+hLq0~-x&G_cXYMgtoSY&5XZz(xcAmKyjU(CHPx literal 0 HcmV?d00001 diff --git a/curtemp/curtemp.css b/curtemp/curtemp.css new file mode 100644 index 00000000..6c127963 --- /dev/null +++ b/curtemp/curtemp.css @@ -0,0 +1,10 @@ + +#curtemp-settings-label, #curtemp-location-label, #curtemp-enable-label { + float: left; + width: 200px; + margin-bottom: 25px; +} +#curtemp-network { + float: left; +} + diff --git a/curtemp/curtemp.php b/curtemp/curtemp.php new file mode 100644 index 00000000..372f0dbc --- /dev/null +++ b/curtemp/curtemp.php @@ -0,0 +1,101 @@ + + * + */ + +function curtemp_install() { + register_hook('network_mod_init', 'addon/curtemp/curtemp.php', 'curtemp_network_mod_init'); + register_hook('plugin_settings', 'addon/curtemp/curtemp.php', 'curtemp_plugin_settings'); + register_hook('plugin_settings_post', 'addon/curtemp/curtemp.php', 'curtemp_plugin_settings_post'); + register_hook('profile_advanced', 'addon/curtemp/curtemp.php', 'curtemp_profile_advanced'); + +} + +function curtemp_uninstall() { + unregister_hook('network_mod_init', 'addon/curtemp/curtemp.php', 'curtemp_network_mod_init'); + unregister_hook('plugin_settings', 'addon/curtemp/curtemp.php', 'curtemp_plugin_settings'); + unregister_hook('plugin_settings_post', 'addon/curtemp/curtemp.php', 'curtemp_plugin_settings_post'); + unregister_hook('profile_advanced', 'addon/curtemp/curtemp.php', 'curtemp_profile_advanced'); + +} + + +function curtemp_network_mod_init($a,$b) { + + if(! intval(get_pconfig(local_user(),'curtemp','curtemp_enable'))) + return; + + $a->page['htmlhead'] .= '' . "\r\n"; + + // the getweather file does all the work here + // the $rpt value is needed for location + // which getweather uses to fetch the weather data for weather and temp + $curtemp_loc = get_pconfig(local_user(), 'curtemp', 'curtemp_loc'); + $curtemp = '
+
+

'.t("Current Temp").'

'; + $curtemp .= ' + Weather:
+ Temperature: '; + + $curtemp .= '
'; + + $a->page['aside'] = $curtemp . $a->page['aside']; +} + + +function curtemp_plugin_settings_post($a,$post) { + if(! local_user() || (! x($_POST,'curtemp-settings-submit'))) + return; +// set_pconfig(local_user(),'curtemp','max_curtemps',intval($_POST['curtemp_max_curtemps'])); + set_pconfig(local_user(),'curtemp','curtemp_loc',trim($_POST['curtemp_loc'])); + set_pconfig(local_user(),'curtemp','curtemp_enable',intval($_POST['curtemp_enable'])); + + info( t('Current Temp settings updated.') . EOL); +} + + +function curtemp_plugin_settings(&$a,&$s) { + + if(! local_user()) + return; + + /* Add our stylesheet to the curtemp so we can make our settings look nice */ + + $a->page['htmlhead'] .= '' . "\r\n"; + + /* Get the current state of our config variable */ + + $curtemp_loc = get_pconfig(local_user(), 'curtemp', 'curtemp_loc'); + $enable = intval(get_pconfig(local_user(),'curtemp','curtemp_enable')); + $enable_checked = (($enable) ? ' checked="checked" ' : ''); + + + /* Add some HTML to the existing form */ + + $s .= '
'; + $s .= '

' . t('Current Temp Settings') . '

'; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + + /* provide a submit button */ + + $s .= '
'; + +} + + diff --git a/curtemp/getweather.php b/curtemp/getweather.php new file mode 100644 index 00000000..eb8890fc --- /dev/null +++ b/curtemp/getweather.php @@ -0,0 +1,222 @@ +$i){ + $a=explode(" | ",$i); + if(is_numeric(array_search($wx,$a))){ + $wxdata['ICON']="$imgpath/$k.jpg"; + break; + } + } + + // Replace any null elements with "Not available" + foreach(array_keys($wxdata) as $key){ + $wxdata[$key]=$wxdata[$key]=="NULL"?"Not available":$wxdata[$key]; + } + + // If we got humidity + if(is_numeric($wxdata['RELATIVE_HUMIDITY'])) + // Append a percent sign + $wxdata['RELATIVE_HUMIDITY'].="%"; + + // Do some formatting to make the output a little friendlier + if($wxdata['VISIBILITY_MI']=="NA") + $wxdata['VISIBILITY']="Not available"; + if($wxdata['VISIBILITY']!="Not available") + $wxdata['VISIBILITY']=(1*$wxdata['VISIBILITY_MI'])." miles"; + + // If we got wind data + if(is_numeric($wxdata['WIND_MPH'])){ + // We're going to output wind data as both MPH from a cardinal direction + // and as Knots from a direction in degrees + + // Calculate the value for Knots + $wxdata['WIND_KNOTS']=$wxdata['WIND_MPH']/1.15; + + // Format the output + $wind=sprintf("From the %s at %d mph (%03.0f° at %d knots)",$wxdata['WIND_DIR'],$wxdata['WIND_MPH'],$wxdata['WIND_DEGREES'],$wxdata['WIND_KNOTS']); + + // If we got a value for wind gusts + if(is_numeric($wxdata['WIND_GUST_MPH']) && $wxdata['WIND_GUST_MPH']>0){ + // add it into the wind string + $wind=str_replace("mph","gusting to ".$wxdata['WIND_GUST_MPH']." mph
", $wind); + $knots=sprintf("%d",$wxdata['WIND_GUST_MPH']/1.15); + $wind=str_replace("knots","gusting to $knots knots",$wind); + } + } else { + // Otherwise, if wind is zero, we'll show "Calm" + $wind=$wxdata['WIND_MPH']=="Not available"?"Not available":"Calm"; + } // Done with wind + $wxdata['WIND_STRING']=$wind; + +} // Done getting and formatting the data + +function startElement($parser, $name, $attrs) { + global $itemname,$itemdata,$wxdata; + $itemname=$name; + $itemdata=""; +} + +function endElement($parser, $name) { + global $itemname,$itemdata,$wxdata; + $wxdata[$itemname]=($itemdata); + $itemdata=""; +} + +function characterData($parser, $data) { + global $itemname,$itemdata,$wxdata; + $itemdata.=$data; +} + +function defineIcons(){ + // See http://weather.gov/data/current_obs/weather.php for source data for this function + $retVal['bkn']="Mostly Cloudy | Mostly Cloudy with Haze | Mostly Cloudy and Breezy"; + $retVal['skc']="Fair | Clear | Fair with Haze | Clear with Haze | Fair and Breezy | Clear and Breezy"; + $retVal['few']="A Few Clouds | A Few Clouds with Haze | A Few Clouds and Breezy"; + $retVal['sct']="Partly Cloudy | Party Cloudy with Haze | Partly Cloudy and Breezy"; + $retVal['ovc']="Overcast | Overcast with Haze | Overcast and Breezy"; + $retVal['nfg']="Fog/Mist | Fog | Freezing Fog | Shallow Fog | Partial Fog | Patches of Fog | Fog in Vicinity | Freezing Fog in Vicinity | Shallow Fog in Vicinity | Partial Fog in Vicinity | Patches of Fog in Vicinity | Showers in Vicinity Fog | Light Freezing Fog | Heavy Freezing Fog"; + $retVal['smoke']="Smoke"; + $retVal['fzra']="Freezing Rain | Freezing Drizzle | Light Freezing Rain | Light Freezing Drizzle | Heavy Freezing Rain | Heavy Freezing Drizzle | Freezing Rain in Vicinity | Freezing Drizzle in Vicinity"; + $retVal['ip']="Ice Pellets | Light Ice Pellets | Heavy Ice Pellets | Ice Pellets in Vicinity | Showers Ice Pellets | Thunderstorm Ice Pellets | Ice Crystals | Hail | Small Hail/Snow Pellets | Light Small Hail/Snow Pellets | Heavy Small Hail/Snow Pellets | Showers Hail | Hail Showers"; + $retVal['mix']="Freezing Rain Snow | Light Freezing Rain Snow | Heavy Freezing Rain Snow | Freezing Drizzle Snow | Light Freezing Drizzle Snow | Heavy Freezing Drizzle Snow | Snow Freezing Rain| Light Snow Freezing Rain | Heavy Snow Freezing Rain | Snow Freezing Drizzle | Light Snow Freezing Drizzle | Heavy Snow Freezing Drizzle"; + $retVal['raip']="Rain Ice Pellets | Light Rain Ice Pellets | Heavy Rain Ice Pellets | Drizzle Ice Pellets | Light Drizzle Ice Pellets | Heavy Drizzle Ice Pellets | Ice Pellets Rain | Light Ice Pellets Rain | Heavy Ice Pellets Rain | Ice Pellets Drizzle | Light Ice Pellets Drizzle | Heavy Ice Pellets Drizzle"; + $retVal['rasn']="Rain Snow | Light Rain Snow | Heavy Rain Snow | Snow Rain | Light Snow Rain | Heavy Snow Rain | Drizzle Snow | Light Drizzle Snow | Heavy Drizzle Snow | Snow Drizzle | Light Snow Drizzle | Heavy Snow Drizzle"; + $retVal['shra']="Rain Showers | Light Rain Showers | Heavy Rain Showers | Rain Showers in Vicinity | Light Showers Rain | Heavy Showers Rain | Showers Rain | Showers Rain in Vicinity | Rain Showers Fog/Mist | Light Rain Showers Fog/Mist | Heavy Rain Showers Fog/Mist | Rain Showers in Vicinity Fog/Mist | Light Showers Rain Fog/Mist | Heavy Showers Rain Fog/Mist | Showers Rain Fog/Mist | Showers Rain in Vicinity Fog/Mist"; + $retVal['tsra']="Thunderstorm | Light Thunderstorm Rain | Heavy Thunderstorm Rain | Thunderstorm Rain Fog/Mist | Light Thunderstorm Rain Fog/Mist | Heavy Thunderstorm Rain Fog/Mist | Thunderstorm Showers in Vicinity | | Light Thunderstorm Rain Haze | Heavy Thunderstorm Rain Haze | Thunderstorm Fog | Light Thunderstorm Rain Fog | Heavy Thunderstorm Rain Fog | Thunderstorm Light Rain | Thunderstorm Heavy Rain | Thunderstorm Rain Fog/Mist | Thunderstorm Light Rain Fog/Mist | Thunderstorm Heavy Rain Fog/Mist | Thunderstorm in Vicinity Fog/Mist | Thunderstorm Showers in Vicinity | Thunderstorm in Vicinity | Thunderstorm in Vicinity Haze | Thunderstorm Haze in Vicinity | Thunderstorm Light Rain Haze | Thunderstorm Heavy Rain Haze | Thunderstorm Fog | Thunderstorm Light Rain Fog | Thunderstorm Heavy Rain Fog | Thunderstorm Hail | Light Thunderstorm Rain Hail | Heavy Thunderstorm Rain Hail | Thunderstorm Rain Hail Fog/Mist | Light Thunderstorm Rain Hail Fog/Mist | Heavy Thunderstorm Rain Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | | Light Thunderstorm Rain Hail Haze | Heavy Thunderstorm Rain Hail Haze | Thunderstorm Hail Fog | Light Thunderstorm Rain Hail Fog | Heavy Thunderstorm Rain Hail Fog | Thunderstorm Light Rain Hail | Thunderstorm Heavy Rain Hail | Thunderstorm Rain Hail Fog/Mist | Thunderstorm Light Rain Hail Fog/Mist | Thunderstorm Heavy Rain Hail Fog/Mist | Thunderstorm in Vicinity Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | Thunderstorm in Vicinity Hail | Thunderstorm in Vicinity Hail Haze | Thunderstorm Haze in Vicinity Hail | Thunderstorm Light Rain Hail Haze | Thunderstorm Heavy Rain Hail Haze | Thunderstorm Hail Fog | Thunderstorm Light Rain Hail Fog | Thunderstorm Heavy Rain Hail Fog | Thunderstorm Small Hail/Snow Pellets | Thunderstorm Rain Small Hail/Snow Pellets | Light Thunderstorm Rain Small Hail/Snow Pellets | Heavy Thunderstorm Rain Small Hail/Snow Pellets"; + $retVal['sn']="Snow | Light Snow | Heavy Snow | Snow Showers | Light Snow Showers | Heavy Snow Showers | Showers Snow | Light Showers Snow | Heavy Showers Snow | Snow Fog/Mist | Light Snow Fog/Mist | Heavy Snow Fog/Mist | Snow Showers Fog/Mist | Light Snow Showers Fog/Mist | Heavy Snow Showers Fog/Mist | Showers Snow Fog/Mist | Light Showers Snow Fog/Mist | Heavy Showers Snow Fog/Mist | Snow Fog | Light Snow Fog | Heavy Snow Fog | Snow Showers Fog | Light Snow Showers Fog | Heavy Snow Showers Fog | Showers Snow Fog | Light Showers Snow Fog | Heavy Showers Snow Fog | Showers in Vicinity Snow | Snow Showers in Vicinity | Snow Showers in Vicinity Fog/Mist | Snow Showers in Vicinity Fog | Low Drifting Snow | Blowing Snow | Snow Low Drifting Snow | Snow Blowing Snow | Light Snow Low Drifting Snow | Light Snow Blowing Snow | Heavy Snow Low Drifting Snow | Heavy Snow Blowing Snow | Thunderstorm Snow | Light Thunderstorm Snow | Heavy Thunderstorm Snow | Snow Grains | Light Snow Grains | Heavy Snow Grains | Heavy Blowing Snow | Blowing Snow in Vicinity"; + $retVal['wind']="Windy | Fair and Windy | A Few Clouds and Windy | Partly Cloudy and Windy | Mostly Cloudy and Windy | Overcast and Windy"; + $retVal['hi_shwrs']="Showers in Vicinity | Showers in Vicinity Fog/Mist | Showers in Vicinity Fog | Showers in Vicinity Haze"; + $retVal['fzrara']="Freezing Rain Rain | Light Freezing Rain Rain | Heavy Freezing Rain Rain | Rain Freezing Rain | Light Rain Freezing Rain | Heavy Rain Freezing Rain | Freezing Drizzle Rain | Light Freezing Drizzle Rain | Heavy Freezing Drizzle Rain | Rain Freezing Drizzle | Light Rain Freezing Drizzle | Heavy Rain Freezing Drizzle"; + $retVal['hi_tsra']="Thunderstorm in Vicinity | Thunderstorm in Vicinity Fog/Mist | Thunderstorm in Vicinity Fog | Thunderstorm Haze in Vicinity | Thunderstorm in Vicinity Haze"; + $retVal['ra1']="Light Rain | Drizzle | Light Drizzle | Heavy Drizzle | Light Rain Fog/Mist | Drizzle Fog/Mist | Light Drizzle Fog/Mist | Heavy Drizzle Fog/Mist | Light Rain Fog | Drizzle Fog | Light Drizzle Fog | Heavy Drizzle Fog"; + $retVal['ra']="Rain | Heavy Rain | Rain Fog/Mist | Heavy Rain Fog/Mist | Rain Fog | Heavy Rain Fog"; + $retVal['nsvrtsra']="Funnel Cloud | Funnel Cloud in Vicinity | Tornado/Water Spout"; + $retVal['dust']="Dust | Low Drifting Dust | Blowing Dust | Sand | Blowing Sand | Low Drifting Sand | Dust/Sand Whirls | Dust/Sand Whirls in Vicinity | Dust Storm | Heavy Dust Storm | Dust Storm in Vicinity | Sand Storm | Heavy Sand Storm | Sand Storm in Vicinity"; + $retVal['mist']="Haze"; + return $retVal; +} + +?> diff --git a/etherpadlite.tar.gz b/etherpadlite.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..e611b9b0e3bceea42965b8a241e3d04d69e28f28 GIT binary patch literal 38196 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 literal 0 HcmV?d00001 From 234611f432d93329fbcefb3dcf2ebd9cf1a4576c Mon Sep 17 00:00:00 2001 From: tony baldwin Date: Mon, 11 Feb 2013 03:40:54 -0500 Subject: [PATCH 2/6] minor alteration --- curtemp/curtemp.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/curtemp/curtemp.php b/curtemp/curtemp.php index 372f0dbc..f52ab940 100644 --- a/curtemp/curtemp.php +++ b/curtemp/curtemp.php @@ -11,7 +11,6 @@ function curtemp_install() { register_hook('network_mod_init', 'addon/curtemp/curtemp.php', 'curtemp_network_mod_init'); register_hook('plugin_settings', 'addon/curtemp/curtemp.php', 'curtemp_plugin_settings'); register_hook('plugin_settings_post', 'addon/curtemp/curtemp.php', 'curtemp_plugin_settings_post'); - register_hook('profile_advanced', 'addon/curtemp/curtemp.php', 'curtemp_profile_advanced'); } @@ -19,7 +18,6 @@ function curtemp_uninstall() { unregister_hook('network_mod_init', 'addon/curtemp/curtemp.php', 'curtemp_network_mod_init'); unregister_hook('plugin_settings', 'addon/curtemp/curtemp.php', 'curtemp_plugin_settings'); unregister_hook('plugin_settings_post', 'addon/curtemp/curtemp.php', 'curtemp_plugin_settings_post'); - unregister_hook('profile_advanced', 'addon/curtemp/curtemp.php', 'curtemp_profile_advanced'); } From 0ccb9f5c0c8496a1684a002e8122f94947de1371 Mon Sep 17 00:00:00 2001 From: tony baldwin Date: Mon, 11 Feb 2013 03:44:05 -0500 Subject: [PATCH 3/6] another minor change (deleted a comment) --- curtemp/curtemp.php | 1 - 1 file changed, 1 deletion(-) diff --git a/curtemp/curtemp.php b/curtemp/curtemp.php index f52ab940..77e14343 100644 --- a/curtemp/curtemp.php +++ b/curtemp/curtemp.php @@ -52,7 +52,6 @@ function curtemp_network_mod_init($a,$b) { function curtemp_plugin_settings_post($a,$post) { if(! local_user() || (! x($_POST,'curtemp-settings-submit'))) return; -// set_pconfig(local_user(),'curtemp','max_curtemps',intval($_POST['curtemp_max_curtemps'])); set_pconfig(local_user(),'curtemp','curtemp_loc',trim($_POST['curtemp_loc'])); set_pconfig(local_user(),'curtemp','curtemp_enable',intval($_POST['curtemp_enable'])); From 3ce891c7d31cc813da11be7d50375962329caca0 Mon Sep 17 00:00:00 2001 From: tony baldwin Date: Mon, 11 Feb 2013 05:24:21 -0500 Subject: [PATCH 4/6] fixed with Fabio's assistance --- curtemp.tgz | Bin 30720 -> 30720 bytes curtemp/curtemp.php | 41 ++--- curtemp/getweather.php | 338 +++++++++++++++++++++-------------------- curtemp/test.php | 5 + 4 files changed, 200 insertions(+), 184 deletions(-) create mode 100644 curtemp/test.php diff --git a/curtemp.tgz b/curtemp.tgz index 6d5084beb9b40eb1d839d5d7a97c512abcf2556f..36f1230e9a6389791631b7bebe228bc5a8428f3d 100644 GIT binary patch delta 4968 zcmahNT})fo8B>~qOG48Sf@8pk%eAj<{BMIB@Fk=M0u4!<|79%lF7`3L!uIv9uLHEo z2%6SS>i)u!_Bw5QnzX1((cW4qmG)3+t2U|9w3lew`mj~nsy=NG)3lv)|IfAS93k%c z{(sM(AAI3@@P+F~QY@LBN%SNV3FC{W>gY+Pl8M=5CY?y7dlJcHDx2&9GbrgQ4Yrz! zAOp~&NcFvkC&&887d>A8%lfqU~ zS&RaSu2%Lz?tG)t0LR@j{6(HP_C{q+OaVQ=TmWz*@T znYmOVi(^V>Nani7blCS%9$aWC6-k~0E5fEIfxJ{})kTmi3!AdIyIWh_7Uk_NS!y+6 zMX9#n24Vacr*aTPzjBX1$A#vPe%F_C9l>KOF7)vD2m<{lPY2lYc0p(~A^~thwV#kk7SYL} zSI()xGm@=(z$&oT!1d4*y@9U2cxsxvJFgM-a@y$J?d1zMR+q0CENI9*t6C!#jgc#f z_du~KG@Cr5h)NX#MUtuv&Y5GNlAGJtOch(Q>Pn0UoY5J8;Xn+#rZozla!hVh2Jv=9 z;06u@$^yv6bfF<^!3|DmiY3V1C9&&b zvCbUxZd_zP`rq@9#8FV5%NcNs-NB-P<#$(rK`lBlUz{|z$R4sDV zLAVQx#ABRMTIRprIBh06Hgm|JB|h*aX!*~55gOqIJdL;m=4r$U<_!8JIDJfu27L&+ zdGJ?|rlm(FXKBRc$=Qrm61?ZX$u|{QE>`3qX?LiIH5g$4)7I!eog58Qf_qSqc_I>I z?zFRiJn5*&2_{K)%}aI8%^INq5$PwV*Y)Fh4g=M>x->EIPvtOa!qC;bjfL4P=F7r-Y8 z6pEFgwwD8;3D|9ZffYm6*<`SzhJWNG12DemyZ*pg1F(N}2Oj&UR_$nGzKP9lTL+PW zzE7>``;NWwZ~oM#!AZV`^Xe)uY{R{#9=CDH)#8DB9iq|vGcIW?7QU;WWay1Rpxl8> zd+YEG@4IVdumi!Cq<~7RCYD5Hj|v8#P-3%CZ`GhI7LEG68}PNK^bY~gh&@a)*VFlK zU~D+XGk$!AQ_9gx9Dmv_gRSWzS2^%y+OBe^(A(VbmkORjkGa!bga^61d@vc-4gH1l z=j|>~DcKS0B|r{-%I%IhIS8FXi^0D3ysQM*+K~@~(RSpM;AG0~3YpUt^m?nnVPM$0+ zU%a-wjD0Z}AB8;aaeWkGS*LTIa~K|dF$4kuqi+tvqn?FChh?C8elF}AcB)kg8{vR) zP8@`zop~OIhb^8_^fcVxneXr69JTWh1CHemU=?3*JM27}>7@CnGaO|}OW7;;U^+|{ z{XV%eFG+O>c0{Fu|J6%W(e#Qunf6&1?mth5qlN+P^+=ag+XFPWRb|K>Nvs$WdSS^M zLA_41)|-H^*vMohnAcr>D?#6i1PTsS+FfJACP`Ep4QpQNt*yz%+0lk88oK1LVLWMK zym~)1LR7;uA1(UzUc22}6++*P-m$Xxr|3-!h{d)n;K#9R7Vuf@h6OCdS4`mO+i{;O zY`Dkb0^Aa+8(gy{ZR2+%&s--H+w%oINqlSx{~$TxvY8u5z^vtIgW00nUdFXI`izGs(!W({ts2}lEVN1 delta 2747 zcmbVOZA?>F7^ah`w;+fgpdjUNx%A#bOMCl4#d1NAiuD7eRK--%T-pP@qug6>Z&By) zKdnV9{W{Mkp$%#tmOb4!*bOU#T}vLDlBKTHJ?GSY%c=X8SG6_|{7NXmuQ-}>(JOk|MX$fz(_Z2cMXygRK>;FKQsw!a zA?pa0=$dAnui8{fM{>IK#|z6JuPzwyc}fQ;VJYDF#X*;c00f*2i7 zC^-Y`iL|Co3Vc@A#+3|C$f;>rP2v>El(keYq0J_(J1s1eSO14Bxl-0z#>q}@%z=(u ztqi$WwvA!H3nQ8#aMbvUo+IH7_2!XZ+|)K?zj9U;o%^sIp-M6R!^K4}uVyD0ep zmW?#lx1df?fp9XdA@0c0lx)cHL;QhoPi#jxdWatlb$4}+>Bw!$#K11rW$+q5UM?2i zvo{>=iS3Jq6T`7+WT1ae1s{T_xn#}5uDespbXTW|xF31BWzMtWhb{QS2B zk<+Vvv#HhfD=ut!Y{~h=fIm2$z82YEVEcI*ftPklWN^=)GOyO z%Ig_4uIUJJkCddQ=B(sJThI^eerzmIk(@)aiez1vk6Af$qm;tqii#stNPwfYk|Xu? z1DpcIKu=9#*%0i6l`2o+xz*fxN~RVn!YypnaaPlff)J=QXI65y!B(q`3tTb{$%kxZ z5{jxAf}>Ekw;E`DRv^K|jU!)huJ6#{Wh*T_IVBtuuGgkp~Pg2H=75)%Lf15YRz}JE0WLhw*HZh5h<%&if^sC^2 z;y4aMMNcSUR3bmO+1D*1fnrms=&r70pr(~vLd{QMT}cXL!rf5M&=mJ%vrr~TM$p%i zG{-q*LZz;L<>nxs2X3j9%94H$dIqR79)529sYj?=aDm?+8IJTuc1L0d`B6y_TS&Fo z%v1f5adZTu3C%!96tF|TKkHIwPKY&B_lIJH4*!TQI)uE98y+%nATrRG*flU18wLa9 ztha8X>Hc<2pOWX=hL$(7c_>1L-0^OW7c;?|f_;%FKk8ge+p~AaBecG7e>5Bh6HE3M z44Ws-kav9CYG!E=zxnEk)n9KOZ^++Zj;h~I-tfC>=p{6%YDP}VWp(Jt;{w~9Vx8oH zADR0cflg3JivZya^hkQT}J~V zE^pokxU6FWQ16HW-t3403R|{YnAzzq4Hj6u6{-dNBJ>@QE_T|0H2ayfhYpq9LAqgJ z>#wlr=($2^zxTef0*0BL_EKPdG;jv6d+;QXz8)N+yBmhC0^S + * Author: Fabio Comuni * */ +require_once('addon/curtemp/getweather.php'); function curtemp_install() { register_hook('network_mod_init', 'addon/curtemp/curtemp.php', 'curtemp_network_mod_init'); @@ -22,30 +24,31 @@ function curtemp_uninstall() { } -function curtemp_network_mod_init($a,$b) { +function curtemp_network_mod_init(&$fk_app,&$b) { - if(! intval(get_pconfig(local_user(),'curtemp','curtemp_enable'))) - return; + if(! intval(get_pconfig(local_user(),'curtemp','curtemp_enable'))) + return; - $a->page['htmlhead'] .= '' . "\r\n"; + $fk_app->page['htmlhead'] .= '' . "\r\n"; - // the getweather file does all the work here - // the $rpt value is needed for location - // which getweather uses to fetch the weather data for weather and temp - $curtemp_loc = get_pconfig(local_user(), 'curtemp', 'curtemp_loc'); - $curtemp = '
-
-

'.t("Current Temp").'

'; - $curtemp .= ' - Weather:
- Temperature: '; + // the getweather file does all the work here + // the $rpt value is needed for location + // which getweather uses to fetch the weather data for weather and temp + $rpt = get_pconfig(local_user(), 'curtemp', 'curtemp_loc'); + $wxdata = GetWeather::get($rpt); + $temp = $wxdata['TEMPERATURE_STRING']; + $weather = $wxdata['WEATHER']; + $curtemp = '
+
+

'.t("Current Temp").'

'; - $curtemp .= '
'; + $curtemp .= 'Weather: "' . $weather . '"
+ Temperature: "' . $temp . '"'; + + $curtemp .= '
'; + + $fk_app->page['aside'] = $curtemp.$fk_app->page['aside']; - $a->page['aside'] = $curtemp . $a->page['aside']; } diff --git a/curtemp/getweather.php b/curtemp/getweather.php index eb8890fc..b4660b9e 100644 --- a/curtemp/getweather.php +++ b/curtemp/getweather.php @@ -28,195 +28,203 @@ Complete list of Weather stations available at http://weather.gov/data/current_obs/index.xml */ +class GetWeather { -// URL for the XML file -$xmlurl="http://www.weather.gov/data/current_obs/$rpt.xml"; + // Initialize some variables + static $itemdata; + static $itemname; + static $wxdata; -// Base url for the icons -$imgpath="http://weather.gov/weather/images/fcicons"; -// Get the icons as an array -$icons=defineIcons(); + function get($rpt) { + + // URL for the XML file + $xmlurl="http://www.weather.gov/data/current_obs/$rpt.xml"; -// Initialize some variables -$itemdata=""; -$itemname=""; -$wxdata=array(); -$data=""; -$report=""; -$icon=""; + // Base url for the icons + $imgpath="http://weather.gov/weather/images/fcicons"; -// create a new CURL resource -if($ch = curl_init()) { + + self::$itemdata=""; + self::$itemname=""; + self::$wxdata=array(); + + $icons=self::defineIcons(); + $icon=""; + $data=""; + $report=""; + + // create a new CURL resource + if($ch = curl_init()) { - // set URL and other appropriate options - curl_setopt($ch, CURLOPT_URL, $xmlurl); - curl_setopt($ch, CURLOPT_HEADER, trus); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); - - // grab URL and pass it to the browser - $data=curl_exec($ch); + // set URL and other appropriate options + curl_setopt($ch, CURLOPT_URL, $xmlurl); + curl_setopt($ch, CURLOPT_HEADER, trus); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + + // grab URL and pass it to the browser + $data=curl_exec($ch); - $r=curl_getinfo($ch); //,CURLINFO_HTTP_CODE); + $r=curl_getinfo($ch); //,CURLINFO_HTTP_CODE); - // close CURL resource, and free up system resources - curl_close($ch); + // close CURL resource, and free up system resources + curl_close($ch); - // Create an XML parser - $xml_parser = xml_parser_create(); - - // Use case-folding so we are sure to find the tag in $map_array - // This will force all tags to upper case so we don't have to worry - // about matching the case of the original in our tests. - xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); - - // Assign the element starting and ending event handlers - xml_set_element_handler($xml_parser, "startElement", "endElement"); - - // Assign a function to handle character data - xml_set_character_data_handler($xml_parser, "characterData"); - - // Parse the file. This will place the data into an associative - // array assigned to the $wxdata variable - xml_parse($xml_parser,$data,true); - - // Free the parser object - xml_parser_free($xml_parser); - - // The OBSERVATION_TIME field of the returned XML will be in the - // format "Last Updated on May 18, 8:53 am CDT" - // We're going to change the format a bit. + // Create an XML parser + $xml_parser = xml_parser_create(); + + // Use case-folding so we are sure to find the tag in $map_array + // This will force all tags to upper case so we don't have to worry + // about matching the case of the original in our tests. + xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true); + + // Assign the element starting and ending event handlers + xml_set_element_handler($xml_parser, array(self,"startElement"), array(self,"endElement")); + + // Assign a function to handle character data + xml_set_character_data_handler($xml_parser, array(self,"characterData")); + + // Parse the file. This will place the data into an associative + // array assigned to the self::$wxdata variable + xml_parse($xml_parser,$data,true); + + // Free the parser object + xml_parser_free($xml_parser); + + // The OBSERVATION_TIME field of the returned XML will be in the + // format "Last Updated on May 18, 8:53 am CDT" + // We're going to change the format a bit. - // Strip out the "Last Updated on " portion of the date/time - // so we can display that separately in our tabular output - $datetime=str_replace("Last Updated on ","",$wxdata['OBSERVATION_TIME']); - - // We now have the format as "May 18, 8:53 am CDT" - // Now, get the time zone. It will be everything from - // the last space character to the end of the string. - $z=strrchr($datetime," "); + // Strip out the "Last Updated on " portion of the date/time + // so we can display that separately in our tabular output + $datetime=str_replace("Last Updated on ","",self::$wxdata['OBSERVATION_TIME']); + + // We now have the format as "May 18, 8:53 am CDT" + // Now, get the time zone. It will be everything from + // the last space character to the end of the string. + $z=strrchr($datetime," "); - // Get the current year - $year=date("Y"); + // Get the current year + $year=date("Y"); - // Now, we stuff the year into the string, following the comma. - $datetime=str_replace(",",", $year",$datetime); + // Now, we stuff the year into the string, following the comma. + $datetime=str_replace(",",", $year",$datetime); - // This does leave a small potential issue where, if you get a - // report between midnight and 1 a.m. on January 1, or the server - // is in a significantly different time zone than the report it - // could be as late as 4 a.m. the year will be wrong because the - // report will be from the previous year. I suppose it would be - // possible to correct for that, but for that little bit, I'm - // not going to worry about it. + // This does leave a small potential issue where, if you get a + // report between midnight and 1 a.m. on January 1, or the server + // is in a significantly different time zone than the report it + // could be as late as 4 a.m. the year will be wrong because the + // report will be from the previous year. I suppose it would be + // possible to correct for that, but for that little bit, I'm + // not going to worry about it. - // Now, strip out the time zone - $datetime=str_replace($z,"",$datetime); + // Now, strip out the time zone + $datetime=str_replace($z,"",$datetime); - // Format the date and time the way we want it and add - // back the time zone - $datetime=date("l F j, Y g:i A",strtotime($datetime)).$z; - $wxdata['OBSERVATION_TIME']=$datetime; - - // Get the WEATHER element - $wx=trim($wxdata['WEATHER']); + // Format the date and time the way we want it and add + // back the time zone + $datetime=date("l F j, Y g:i A",strtotime($datetime)).$z; + self::$wxdata['OBSERVATION_TIME']=$datetime; + + // Get the WEATHER element + $wx=trim(self::$wxdata['WEATHER']); - // Now, get the icon to match the weather - foreach($icons as $k=>$i){ - $a=explode(" | ",$i); - if(is_numeric(array_search($wx,$a))){ - $wxdata['ICON']="$imgpath/$k.jpg"; - break; - } - } + // Now, get the icon to match the weather + foreach($icons as $k=>$i){ + $a=explode(" | ",$i); + if(is_numeric(array_search($wx,$a))){ + self::$wxdata['ICON']="$imgpath/$k.jpg"; + break; + } + } - // Replace any null elements with "Not available" - foreach(array_keys($wxdata) as $key){ - $wxdata[$key]=$wxdata[$key]=="NULL"?"Not available":$wxdata[$key]; - } + // Replace any null elements with "Not available" + foreach(array_keys(self::$wxdata) as $key){ + self::$wxdata[$key]=self::$wxdata[$key]=="NULL"?"Not available":self::$wxdata[$key]; + } - // If we got humidity - if(is_numeric($wxdata['RELATIVE_HUMIDITY'])) - // Append a percent sign - $wxdata['RELATIVE_HUMIDITY'].="%"; + // If we got humidity + if(is_numeric(self::$wxdata['RELATIVE_HUMIDITY'])) + // Append a percent sign + self::$wxdata['RELATIVE_HUMIDITY'].="%"; - // Do some formatting to make the output a little friendlier - if($wxdata['VISIBILITY_MI']=="NA") - $wxdata['VISIBILITY']="Not available"; - if($wxdata['VISIBILITY']!="Not available") - $wxdata['VISIBILITY']=(1*$wxdata['VISIBILITY_MI'])." miles"; + // Do some formatting to make the output a little friendlier + if(self::$wxdata['VISIBILITY_MI']=="NA") + self::$wxdata['VISIBILITY']="Not available"; + if(self::$wxdata['VISIBILITY']!="Not available") + self::$wxdata['VISIBILITY']=(1*self::$wxdata['VISIBILITY_MI'])." miles"; - // If we got wind data - if(is_numeric($wxdata['WIND_MPH'])){ - // We're going to output wind data as both MPH from a cardinal direction - // and as Knots from a direction in degrees + // If we got wind data + if(is_numeric(self::$wxdata['WIND_MPH'])){ + // We're going to output wind data as both MPH from a cardinal direction + // and as Knots from a direction in degrees - // Calculate the value for Knots - $wxdata['WIND_KNOTS']=$wxdata['WIND_MPH']/1.15; + // Calculate the value for Knots + self::$wxdata['WIND_KNOTS']=self::$wxdata['WIND_MPH']/1.15; - // Format the output - $wind=sprintf("From the %s at %d mph (%03.0f° at %d knots)",$wxdata['WIND_DIR'],$wxdata['WIND_MPH'],$wxdata['WIND_DEGREES'],$wxdata['WIND_KNOTS']); + // Format the output + $wind=sprintf("From the %s at %d mph (%03.0f° at %d knots)",self::$wxdata['WIND_DIR'],self::$wxdata['WIND_MPH'],self::$wxdata['WIND_DEGREES'],self::$wxdata['WIND_KNOTS']); - // If we got a value for wind gusts - if(is_numeric($wxdata['WIND_GUST_MPH']) && $wxdata['WIND_GUST_MPH']>0){ - // add it into the wind string - $wind=str_replace("mph","gusting to ".$wxdata['WIND_GUST_MPH']." mph
", $wind); - $knots=sprintf("%d",$wxdata['WIND_GUST_MPH']/1.15); - $wind=str_replace("knots","gusting to $knots knots",$wind); - } - } else { - // Otherwise, if wind is zero, we'll show "Calm" - $wind=$wxdata['WIND_MPH']=="Not available"?"Not available":"Calm"; - } // Done with wind - $wxdata['WIND_STRING']=$wind; + // If we got a value for wind gusts + if(is_numeric(self::$wxdata['WIND_GUST_MPH']) && self::$wxdata['WIND_GUST_MPH']>0){ + // add it into the wind string + $wind=str_replace("mph","gusting to ".self::$wxdata['WIND_GUST_MPH']." mph
", $wind); + $knots=sprintf("%d",self::$wxdata['WIND_GUST_MPH']/1.15); + $wind=str_replace("knots","gusting to $knots knots",$wind); + } + } else { + // Otherwise, if wind is zero, we'll show "Calm" + $wind=self::$wxdata['WIND_MPH']=="Not available"?"Not available":"Calm"; + } // Done with wind + self::$wxdata['WIND_STRING']=$wind; -} // Done getting and formatting the data + } // Done getting and formatting the data + return self::$wxdata; + } + + function startElement($parser, $name, $attrs) { + self::$itemname=$name; + self::$itemdata=""; + } -function startElement($parser, $name, $attrs) { - global $itemname,$itemdata,$wxdata; - $itemname=$name; - $itemdata=""; + function endElement($parser, $name) { + self::$wxdata[self::$itemname]=self::$itemdata; + self::$itemdata=""; + } + + function characterData($parser, $data) { + self::$itemdata.=$data; + } + + function defineIcons(){ + // See http://weather.gov/data/current_obs/weather.php for source data for this function + $retVal['bkn']="Mostly Cloudy | Mostly Cloudy with Haze | Mostly Cloudy and Breezy"; + $retVal['skc']="Fair | Clear | Fair with Haze | Clear with Haze | Fair and Breezy | Clear and Breezy"; + $retVal['few']="A Few Clouds | A Few Clouds with Haze | A Few Clouds and Breezy"; + $retVal['sct']="Partly Cloudy | Party Cloudy with Haze | Partly Cloudy and Breezy"; + $retVal['ovc']="Overcast | Overcast with Haze | Overcast and Breezy"; + $retVal['nfg']="Fog/Mist | Fog | Freezing Fog | Shallow Fog | Partial Fog | Patches of Fog | Fog in Vicinity | Freezing Fog in Vicinity | Shallow Fog in Vicinity | Partial Fog in Vicinity | Patches of Fog in Vicinity | Showers in Vicinity Fog | Light Freezing Fog | Heavy Freezing Fog"; + $retVal['smoke']="Smoke"; + $retVal['fzra']="Freezing Rain | Freezing Drizzle | Light Freezing Rain | Light Freezing Drizzle | Heavy Freezing Rain | Heavy Freezing Drizzle | Freezing Rain in Vicinity | Freezing Drizzle in Vicinity"; + $retVal['ip']="Ice Pellets | Light Ice Pellets | Heavy Ice Pellets | Ice Pellets in Vicinity | Showers Ice Pellets | Thunderstorm Ice Pellets | Ice Crystals | Hail | Small Hail/Snow Pellets | Light Small Hail/Snow Pellets | Heavy Small Hail/Snow Pellets | Showers Hail | Hail Showers"; + $retVal['mix']="Freezing Rain Snow | Light Freezing Rain Snow | Heavy Freezing Rain Snow | Freezing Drizzle Snow | Light Freezing Drizzle Snow | Heavy Freezing Drizzle Snow | Snow Freezing Rain| Light Snow Freezing Rain | Heavy Snow Freezing Rain | Snow Freezing Drizzle | Light Snow Freezing Drizzle | Heavy Snow Freezing Drizzle"; + $retVal['raip']="Rain Ice Pellets | Light Rain Ice Pellets | Heavy Rain Ice Pellets | Drizzle Ice Pellets | Light Drizzle Ice Pellets | Heavy Drizzle Ice Pellets | Ice Pellets Rain | Light Ice Pellets Rain | Heavy Ice Pellets Rain | Ice Pellets Drizzle | Light Ice Pellets Drizzle | Heavy Ice Pellets Drizzle"; + $retVal['rasn']="Rain Snow | Light Rain Snow | Heavy Rain Snow | Snow Rain | Light Snow Rain | Heavy Snow Rain | Drizzle Snow | Light Drizzle Snow | Heavy Drizzle Snow | Snow Drizzle | Light Snow Drizzle | Heavy Snow Drizzle"; + $retVal['shra']="Rain Showers | Light Rain Showers | Heavy Rain Showers | Rain Showers in Vicinity | Light Showers Rain | Heavy Showers Rain | Showers Rain | Showers Rain in Vicinity | Rain Showers Fog/Mist | Light Rain Showers Fog/Mist | Heavy Rain Showers Fog/Mist | Rain Showers in Vicinity Fog/Mist | Light Showers Rain Fog/Mist | Heavy Showers Rain Fog/Mist | Showers Rain Fog/Mist | Showers Rain in Vicinity Fog/Mist"; + $retVal['tsra']="Thunderstorm | Light Thunderstorm Rain | Heavy Thunderstorm Rain | Thunderstorm Rain Fog/Mist | Light Thunderstorm Rain Fog/Mist | Heavy Thunderstorm Rain Fog/Mist | Thunderstorm Showers in Vicinity | | Light Thunderstorm Rain Haze | Heavy Thunderstorm Rain Haze | Thunderstorm Fog | Light Thunderstorm Rain Fog | Heavy Thunderstorm Rain Fog | Thunderstorm Light Rain | Thunderstorm Heavy Rain | Thunderstorm Rain Fog/Mist | Thunderstorm Light Rain Fog/Mist | Thunderstorm Heavy Rain Fog/Mist | Thunderstorm in Vicinity Fog/Mist | Thunderstorm Showers in Vicinity | Thunderstorm in Vicinity | Thunderstorm in Vicinity Haze | Thunderstorm Haze in Vicinity | Thunderstorm Light Rain Haze | Thunderstorm Heavy Rain Haze | Thunderstorm Fog | Thunderstorm Light Rain Fog | Thunderstorm Heavy Rain Fog | Thunderstorm Hail | Light Thunderstorm Rain Hail | Heavy Thunderstorm Rain Hail | Thunderstorm Rain Hail Fog/Mist | Light Thunderstorm Rain Hail Fog/Mist | Heavy Thunderstorm Rain Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | | Light Thunderstorm Rain Hail Haze | Heavy Thunderstorm Rain Hail Haze | Thunderstorm Hail Fog | Light Thunderstorm Rain Hail Fog | Heavy Thunderstorm Rain Hail Fog | Thunderstorm Light Rain Hail | Thunderstorm Heavy Rain Hail | Thunderstorm Rain Hail Fog/Mist | Thunderstorm Light Rain Hail Fog/Mist | Thunderstorm Heavy Rain Hail Fog/Mist | Thunderstorm in Vicinity Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | Thunderstorm in Vicinity Hail | Thunderstorm in Vicinity Hail Haze | Thunderstorm Haze in Vicinity Hail | Thunderstorm Light Rain Hail Haze | Thunderstorm Heavy Rain Hail Haze | Thunderstorm Hail Fog | Thunderstorm Light Rain Hail Fog | Thunderstorm Heavy Rain Hail Fog | Thunderstorm Small Hail/Snow Pellets | Thunderstorm Rain Small Hail/Snow Pellets | Light Thunderstorm Rain Small Hail/Snow Pellets | Heavy Thunderstorm Rain Small Hail/Snow Pellets"; + $retVal['sn']="Snow | Light Snow | Heavy Snow | Snow Showers | Light Snow Showers | Heavy Snow Showers | Showers Snow | Light Showers Snow | Heavy Showers Snow | Snow Fog/Mist | Light Snow Fog/Mist | Heavy Snow Fog/Mist | Snow Showers Fog/Mist | Light Snow Showers Fog/Mist | Heavy Snow Showers Fog/Mist | Showers Snow Fog/Mist | Light Showers Snow Fog/Mist | Heavy Showers Snow Fog/Mist | Snow Fog | Light Snow Fog | Heavy Snow Fog | Snow Showers Fog | Light Snow Showers Fog | Heavy Snow Showers Fog | Showers Snow Fog | Light Showers Snow Fog | Heavy Showers Snow Fog | Showers in Vicinity Snow | Snow Showers in Vicinity | Snow Showers in Vicinity Fog/Mist | Snow Showers in Vicinity Fog | Low Drifting Snow | Blowing Snow | Snow Low Drifting Snow | Snow Blowing Snow | Light Snow Low Drifting Snow | Light Snow Blowing Snow | Heavy Snow Low Drifting Snow | Heavy Snow Blowing Snow | Thunderstorm Snow | Light Thunderstorm Snow | Heavy Thunderstorm Snow | Snow Grains | Light Snow Grains | Heavy Snow Grains | Heavy Blowing Snow | Blowing Snow in Vicinity"; + $retVal['wind']="Windy | Fair and Windy | A Few Clouds and Windy | Partly Cloudy and Windy | Mostly Cloudy and Windy | Overcast and Windy"; + $retVal['hi_shwrs']="Showers in Vicinity | Showers in Vicinity Fog/Mist | Showers in Vicinity Fog | Showers in Vicinity Haze"; + $retVal['fzrara']="Freezing Rain Rain | Light Freezing Rain Rain | Heavy Freezing Rain Rain | Rain Freezing Rain | Light Rain Freezing Rain | Heavy Rain Freezing Rain | Freezing Drizzle Rain | Light Freezing Drizzle Rain | Heavy Freezing Drizzle Rain | Rain Freezing Drizzle | Light Rain Freezing Drizzle | Heavy Rain Freezing Drizzle"; + $retVal['hi_tsra']="Thunderstorm in Vicinity | Thunderstorm in Vicinity Fog/Mist | Thunderstorm in Vicinity Fog | Thunderstorm Haze in Vicinity | Thunderstorm in Vicinity Haze"; + $retVal['ra1']="Light Rain | Drizzle | Light Drizzle | Heavy Drizzle | Light Rain Fog/Mist | Drizzle Fog/Mist | Light Drizzle Fog/Mist | Heavy Drizzle Fog/Mist | Light Rain Fog | Drizzle Fog | Light Drizzle Fog | Heavy Drizzle Fog"; + $retVal['ra']="Rain | Heavy Rain | Rain Fog/Mist | Heavy Rain Fog/Mist | Rain Fog | Heavy Rain Fog"; + $retVal['nsvrtsra']="Funnel Cloud | Funnel Cloud in Vicinity | Tornado/Water Spout"; + $retVal['dust']="Dust | Low Drifting Dust | Blowing Dust | Sand | Blowing Sand | Low Drifting Sand | Dust/Sand Whirls | Dust/Sand Whirls in Vicinity | Dust Storm | Heavy Dust Storm | Dust Storm in Vicinity | Sand Storm | Heavy Sand Storm | Sand Storm in Vicinity"; + $retVal['mist']="Haze"; + return $retVal; + } +// end CLASS } - -function endElement($parser, $name) { - global $itemname,$itemdata,$wxdata; - $wxdata[$itemname]=($itemdata); - $itemdata=""; -} - -function characterData($parser, $data) { - global $itemname,$itemdata,$wxdata; - $itemdata.=$data; -} - -function defineIcons(){ - // See http://weather.gov/data/current_obs/weather.php for source data for this function - $retVal['bkn']="Mostly Cloudy | Mostly Cloudy with Haze | Mostly Cloudy and Breezy"; - $retVal['skc']="Fair | Clear | Fair with Haze | Clear with Haze | Fair and Breezy | Clear and Breezy"; - $retVal['few']="A Few Clouds | A Few Clouds with Haze | A Few Clouds and Breezy"; - $retVal['sct']="Partly Cloudy | Party Cloudy with Haze | Partly Cloudy and Breezy"; - $retVal['ovc']="Overcast | Overcast with Haze | Overcast and Breezy"; - $retVal['nfg']="Fog/Mist | Fog | Freezing Fog | Shallow Fog | Partial Fog | Patches of Fog | Fog in Vicinity | Freezing Fog in Vicinity | Shallow Fog in Vicinity | Partial Fog in Vicinity | Patches of Fog in Vicinity | Showers in Vicinity Fog | Light Freezing Fog | Heavy Freezing Fog"; - $retVal['smoke']="Smoke"; - $retVal['fzra']="Freezing Rain | Freezing Drizzle | Light Freezing Rain | Light Freezing Drizzle | Heavy Freezing Rain | Heavy Freezing Drizzle | Freezing Rain in Vicinity | Freezing Drizzle in Vicinity"; - $retVal['ip']="Ice Pellets | Light Ice Pellets | Heavy Ice Pellets | Ice Pellets in Vicinity | Showers Ice Pellets | Thunderstorm Ice Pellets | Ice Crystals | Hail | Small Hail/Snow Pellets | Light Small Hail/Snow Pellets | Heavy Small Hail/Snow Pellets | Showers Hail | Hail Showers"; - $retVal['mix']="Freezing Rain Snow | Light Freezing Rain Snow | Heavy Freezing Rain Snow | Freezing Drizzle Snow | Light Freezing Drizzle Snow | Heavy Freezing Drizzle Snow | Snow Freezing Rain| Light Snow Freezing Rain | Heavy Snow Freezing Rain | Snow Freezing Drizzle | Light Snow Freezing Drizzle | Heavy Snow Freezing Drizzle"; - $retVal['raip']="Rain Ice Pellets | Light Rain Ice Pellets | Heavy Rain Ice Pellets | Drizzle Ice Pellets | Light Drizzle Ice Pellets | Heavy Drizzle Ice Pellets | Ice Pellets Rain | Light Ice Pellets Rain | Heavy Ice Pellets Rain | Ice Pellets Drizzle | Light Ice Pellets Drizzle | Heavy Ice Pellets Drizzle"; - $retVal['rasn']="Rain Snow | Light Rain Snow | Heavy Rain Snow | Snow Rain | Light Snow Rain | Heavy Snow Rain | Drizzle Snow | Light Drizzle Snow | Heavy Drizzle Snow | Snow Drizzle | Light Snow Drizzle | Heavy Snow Drizzle"; - $retVal['shra']="Rain Showers | Light Rain Showers | Heavy Rain Showers | Rain Showers in Vicinity | Light Showers Rain | Heavy Showers Rain | Showers Rain | Showers Rain in Vicinity | Rain Showers Fog/Mist | Light Rain Showers Fog/Mist | Heavy Rain Showers Fog/Mist | Rain Showers in Vicinity Fog/Mist | Light Showers Rain Fog/Mist | Heavy Showers Rain Fog/Mist | Showers Rain Fog/Mist | Showers Rain in Vicinity Fog/Mist"; - $retVal['tsra']="Thunderstorm | Light Thunderstorm Rain | Heavy Thunderstorm Rain | Thunderstorm Rain Fog/Mist | Light Thunderstorm Rain Fog/Mist | Heavy Thunderstorm Rain Fog/Mist | Thunderstorm Showers in Vicinity | | Light Thunderstorm Rain Haze | Heavy Thunderstorm Rain Haze | Thunderstorm Fog | Light Thunderstorm Rain Fog | Heavy Thunderstorm Rain Fog | Thunderstorm Light Rain | Thunderstorm Heavy Rain | Thunderstorm Rain Fog/Mist | Thunderstorm Light Rain Fog/Mist | Thunderstorm Heavy Rain Fog/Mist | Thunderstorm in Vicinity Fog/Mist | Thunderstorm Showers in Vicinity | Thunderstorm in Vicinity | Thunderstorm in Vicinity Haze | Thunderstorm Haze in Vicinity | Thunderstorm Light Rain Haze | Thunderstorm Heavy Rain Haze | Thunderstorm Fog | Thunderstorm Light Rain Fog | Thunderstorm Heavy Rain Fog | Thunderstorm Hail | Light Thunderstorm Rain Hail | Heavy Thunderstorm Rain Hail | Thunderstorm Rain Hail Fog/Mist | Light Thunderstorm Rain Hail Fog/Mist | Heavy Thunderstorm Rain Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | | Light Thunderstorm Rain Hail Haze | Heavy Thunderstorm Rain Hail Haze | Thunderstorm Hail Fog | Light Thunderstorm Rain Hail Fog | Heavy Thunderstorm Rain Hail Fog | Thunderstorm Light Rain Hail | Thunderstorm Heavy Rain Hail | Thunderstorm Rain Hail Fog/Mist | Thunderstorm Light Rain Hail Fog/Mist | Thunderstorm Heavy Rain Hail Fog/Mist | Thunderstorm in Vicinity Hail Fog/Mist | Thunderstorm Showers in Vicinity Hail | Thunderstorm in Vicinity Hail | Thunderstorm in Vicinity Hail Haze | Thunderstorm Haze in Vicinity Hail | Thunderstorm Light Rain Hail Haze | Thunderstorm Heavy Rain Hail Haze | Thunderstorm Hail Fog | Thunderstorm Light Rain Hail Fog | Thunderstorm Heavy Rain Hail Fog | Thunderstorm Small Hail/Snow Pellets | Thunderstorm Rain Small Hail/Snow Pellets | Light Thunderstorm Rain Small Hail/Snow Pellets | Heavy Thunderstorm Rain Small Hail/Snow Pellets"; - $retVal['sn']="Snow | Light Snow | Heavy Snow | Snow Showers | Light Snow Showers | Heavy Snow Showers | Showers Snow | Light Showers Snow | Heavy Showers Snow | Snow Fog/Mist | Light Snow Fog/Mist | Heavy Snow Fog/Mist | Snow Showers Fog/Mist | Light Snow Showers Fog/Mist | Heavy Snow Showers Fog/Mist | Showers Snow Fog/Mist | Light Showers Snow Fog/Mist | Heavy Showers Snow Fog/Mist | Snow Fog | Light Snow Fog | Heavy Snow Fog | Snow Showers Fog | Light Snow Showers Fog | Heavy Snow Showers Fog | Showers Snow Fog | Light Showers Snow Fog | Heavy Showers Snow Fog | Showers in Vicinity Snow | Snow Showers in Vicinity | Snow Showers in Vicinity Fog/Mist | Snow Showers in Vicinity Fog | Low Drifting Snow | Blowing Snow | Snow Low Drifting Snow | Snow Blowing Snow | Light Snow Low Drifting Snow | Light Snow Blowing Snow | Heavy Snow Low Drifting Snow | Heavy Snow Blowing Snow | Thunderstorm Snow | Light Thunderstorm Snow | Heavy Thunderstorm Snow | Snow Grains | Light Snow Grains | Heavy Snow Grains | Heavy Blowing Snow | Blowing Snow in Vicinity"; - $retVal['wind']="Windy | Fair and Windy | A Few Clouds and Windy | Partly Cloudy and Windy | Mostly Cloudy and Windy | Overcast and Windy"; - $retVal['hi_shwrs']="Showers in Vicinity | Showers in Vicinity Fog/Mist | Showers in Vicinity Fog | Showers in Vicinity Haze"; - $retVal['fzrara']="Freezing Rain Rain | Light Freezing Rain Rain | Heavy Freezing Rain Rain | Rain Freezing Rain | Light Rain Freezing Rain | Heavy Rain Freezing Rain | Freezing Drizzle Rain | Light Freezing Drizzle Rain | Heavy Freezing Drizzle Rain | Rain Freezing Drizzle | Light Rain Freezing Drizzle | Heavy Rain Freezing Drizzle"; - $retVal['hi_tsra']="Thunderstorm in Vicinity | Thunderstorm in Vicinity Fog/Mist | Thunderstorm in Vicinity Fog | Thunderstorm Haze in Vicinity | Thunderstorm in Vicinity Haze"; - $retVal['ra1']="Light Rain | Drizzle | Light Drizzle | Heavy Drizzle | Light Rain Fog/Mist | Drizzle Fog/Mist | Light Drizzle Fog/Mist | Heavy Drizzle Fog/Mist | Light Rain Fog | Drizzle Fog | Light Drizzle Fog | Heavy Drizzle Fog"; - $retVal['ra']="Rain | Heavy Rain | Rain Fog/Mist | Heavy Rain Fog/Mist | Rain Fog | Heavy Rain Fog"; - $retVal['nsvrtsra']="Funnel Cloud | Funnel Cloud in Vicinity | Tornado/Water Spout"; - $retVal['dust']="Dust | Low Drifting Dust | Blowing Dust | Sand | Blowing Sand | Low Drifting Sand | Dust/Sand Whirls | Dust/Sand Whirls in Vicinity | Dust Storm | Heavy Dust Storm | Dust Storm in Vicinity | Sand Storm | Heavy Sand Storm | Sand Storm in Vicinity"; - $retVal['mist']="Haze"; - return $retVal; -} - ?> diff --git a/curtemp/test.php b/curtemp/test.php new file mode 100644 index 00000000..cd51c23c --- /dev/null +++ b/curtemp/test.php @@ -0,0 +1,5 @@ + Date: Mon, 11 Feb 2013 05:44:12 -0500 Subject: [PATCH 5/6] added infor for user to find station location code --- curtemp.tgz | Bin 30720 -> 30720 bytes curtemp/curtemp.php | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/curtemp.tgz b/curtemp.tgz index 36f1230e9a6389791631b7bebe228bc5a8428f3d..3281dbf705219772bf96cf7aa19d81d84cbc88e2 100644 GIT binary patch delta 688 zcmb7>K}!Nb6vx*^W5Esv9!$a>Lf4&LS6zrr@DgP za~c{nVmlM;k0OZ$fF?MXPX|ZYB*zcgxB1@pcCPC>+P0ljuR9u8zuOu2Q`5T?a()`_qFbrZm|*n< z0c+Y#L=VG2kltDK-=O9f>5rhK+EPP_hj7dEP#Av{j~6G!SAAaM`Hh{&lTsyTHFxdg frEGYyq4&3?dL?J?mSzijTl#Mr>dn8Co%(8%17LBVvgA!7

mznk%9t4Nq%1CL_rxA5Iy;0z~xCn`P?vLfb`_5AUReu69xqXyt+1p2rx|+V2a1; z5_4l?L%2(f49tNpF*X6Y1izV+SgI$Bu=?sMIF^=VFind the location code for the station or airport nearest you at http://en.wikipedia.org/wiki/International_Air_Transport_Association_airport_code * Version: 1.0 * Author: Tony Baldwin - * Author: Fabio Comuni * */ require_once('addon/curtemp/getweather.php'); @@ -83,6 +82,7 @@ function curtemp_plugin_settings(&$a,&$s) { $s .= '

'; $s .= '

' . t('Current Temp Settings') . '

'; $s .= '
'; + $s .= '

Find the location code for the airport/weather station nearest you here.

'; $s .= ''; $s .= ''; $s .= '
'; From 02b04541e722bebe193601b0d5db52e4e4d977b2 Mon Sep 17 00:00:00 2001 From: tony baldwin Date: Mon, 11 Feb 2013 10:30:14 -0500 Subject: [PATCH 6/6] fixed so data appear without quote marks --- curtemp.tgz | Bin 30720 -> 30720 bytes curtemp/curtemp.php | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/curtemp.tgz b/curtemp.tgz index 3281dbf705219772bf96cf7aa19d81d84cbc88e2..2944ad4ded8548f84e1e983ecf04e3a271057d3c 100644 GIT binary patch delta 139 zcmZqpz}WDCaRUd_W)6`bu9KMZ^$g8T4Hygz3}7^nX49M! Li

'.t("Current Temp").'

'; - $curtemp .= 'Weather: "' . $weather . '"
- Temperature: "' . $temp . '"'; + $curtemp .= "Weather: $weather
+ Temperature: $temp "; $curtemp .= '
';