sort agencies by name
Former-commit-id: 24f1070892cb642be8833a65922d273623957f27
--- a/about.php
+++ b/about.php
@@ -5,6 +5,10 @@
<div class="foundation-header">
<h1><a href="about.php">About/FAQ</a></h1>
</div>
+<a href="http://thenounproject.com/noun/document-dump/">Document Dump icon designed by Iconathon, 2013</a>
+Contact us: maxious@lambdacomplex.org
+
+Exports: <a href="admin/exportAll.csv.php">All Agencies</a> <a href="admin/exportEmployees.csv.php">Agency Employee Headcounts</a>
<h2> Attributions </h2>
National Archives of Australia, Australian Governments’ Interactive Functions Thesaurus, 2nd edition, September 2005, published at http://www.naa.gov.au/recordkeeping/thesaurus/index.htm <br/>
data.gov.au http://data.gov.au/dataset/directory-gov-au-full-data-export/ <br/>
--- /dev/null
+++ b/admin/logo.ai
@@ -1,1 +1,206 @@
+1 0 obj
<</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 6 0 R]/Order 7 0 R/RBGroups[]>>/OCGs[5 0 R 6 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<</Length 21938/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:CreatorTool>Adobe Illustrator CS5</xmp:CreatorTool>
+ <xmp:CreateDate>2013-06-22T15:58:27+10:00</xmp:CreateDate>
+ <xmp:ModifyDate>2013-06-22T15:58:27+10:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2013-06-22T15:58:27+10:00</xmp:MetadataDate>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>256</xmpGImg:width>
+ <xmpGImg:height>196</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAxAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqkOv+cNN0kmEf6TeD/dCGgX/Xben68pyZ
hH3tsMRkwrUPPOv3ZISYWsZ6JCKH/gjVvxzElnkXIjhiElnvby4NZ55JSepd2b9ZyoyJ5tgACeeS
Na/R+rCGVqWt3SN69A/7Dfft9OXYJ8Mve15oWHqObBwnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq4kAVOwHU4qwbzV54IL2OkvuPhlux+Ij/5q+7xzEzZ+kXJx
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
94/Jv8/L5Ly38veb7g3FtMRHZatKf3kbk0VLhz9pD/Odx3qPs52n1JupPH9t+z0TE5cAojnHv936
vwetfmxB5v8A8JXF/wCVNQkstT04G4aKNUcTwqKyJR1f4gPiWny75lZxLhuJ3eb7Hlg8YRzREoS2
9x6ftfMn/K8PzV/6mCb/AJFQf9U81v5nJ3vffyDo/wDUx8z+t3/K8PzV/wCpgm/5FQf9U8fzOTvX
+QdH/qY+Z/W7/leH5q/9TBN/yKg/6p4/mcnev8g6P/Ux8z+t3/K8PzV/6mCb/kVB/wBU8fzOTvX+
QdH/AKmPmf1ro/zz/NVHVxr8hKmtGityDTxBjw/mcneg9gaM/wCTHzP63ovlP/nKaVeEHmrSw42B
vbDY/NoZDQ+5Dj5ZfDW/zg6PWeyQ54ZfCX6x+p67ovnT8vvPFm1rZ3lpqaSj97p1wo9TpU8oJgGN
PGlPfMuOSEx3vNZ9DqdJK5CUa/iH6wxDzX/zjb5G1fnNpLSaHdtuPR/e29fEwuaj/YOoyqekieWz
s9H7T6jHtOskfPY/P9YLH/y5/wCccrrRvNh1HzLLbX+n2IElhFEWKyy1+FpUdRQR0rx3qabkA5Xi
0lSuTm9p+0wy4eHEDGUufkPL3sq/OX844fJVsumaYEuPMV0nJFf4o7eM7epIO7H9hfpO2xt1Go4N
hzdd2J2KdUeOe2Ifb5D9L5V1rXtZ1y/e/wBXvJb68k+1LMxYgdeKjoqjso2GauUjI2X0TBp8eKPD
ACMfJAYG5Fadqeo6ZeR3unXMtndxGsc8DtG4+TKQcIJG4a8uKOSPDICUT3vpz8lPzubzQ6+X/MLI
mvKpNrdKAiXSqKsCo2EoArtsR4UzZafUcWx5vA9u9hfl/wB7i/u+o/m/sY3/AM5I/llDEh866VFw
5Oqa1Eg2q54pcU7EtRH8TQ+JyvV4f4h8XO9mO1Sf8Hmf6v6v0j+x8+5gPaOxVH6Fo91rWtWOk2gr
c388dvF3AMjBeR9lrU4Yxs006jMMWOU5coi3195vFronlvTfLliOEEcccSoP9826hVr82AP0ZstQ
eGIiHycTllySyS5k382D5htyc+XvM97o0wCky2bH97bk7fNfA5bjymPua8mMSepafqFpqFol1avz
if7we6sOxGbCMhIWHClEg0X5/wCaN9pdirsVfWn/ADjf5ej0z8u49QKgXOsTyXEjftenGxhjX5fA
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</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>100.000000</stDim:w>
+ <stDim:h>100.000000</stDim:h>
+ <stDim:unit>Points</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:Type>Document</illustrator:Type>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">logo</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:DocumentID>uuid:4fae17bc-59c6-9342-b6da-8cb94c264d4a</xmpMM:DocumentID>
+ <xmpMM:InstanceID>uuid:ecb84851-93a3-9547-b0ae-1dc3fa2c0ab0</xmpMM:InstanceID>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.90</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
endstream
endobj
3 0 obj
<</Count 1/Kids[8 0 R]/Type/Pages>>
endobj
8 0 obj
<</ArtBox[3.0 13.543 96.5889 84.2764]/BleedBox[0.0 0.0 100.0 100.0]/Contents 9 0 R/LastModified(D:20130622155827+10'00')/MediaBox[0.0 0.0 100.0 100.0]/Parent 3 0 R/PieceInfo<</Illustrator 10 0 R>>/Resources<</ExtGState<</GS0 11 0 R>>/Properties<</MC0 5 0 R/MC1 6 0 R>>>>/Thumb 12 0 R/TrimBox[0.0 0.0 100.0 100.0]/Type/Page>>
endobj
9 0 obj
<</Filter/FlateDecode/Length 1114>>stream
+8;VGJ_$pAe$j%5g#Y/8.G]f[^A#Q9pU$sJ@-BS$94,G-<WGQ8j'TDl!%+#tGRN2bX
+mZsjSF>#9J"p"S6@ES~>
endstream
endobj
13 0 obj
[/Indexed/DeviceRGB 255 14 0 R]
endobj
14 0 obj
<</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
endstream
endobj
5 0 obj
<</Intent 15 0 R/Name(docs)/Type/OCG/Usage 16 0 R>>
endobj
6 0 obj
<</Intent 17 0 R/Name(trunk)/Type/OCG/Usage 18 0 R>>
endobj
17 0 obj
[/View/Design]
endobj
18 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
15 0 obj
[/View/Design]
endobj
16 0 obj
<</CreatorInfo<</Creator(Adobe Illustrator 15.0)/Subtype/Artwork>>>>
endobj
11 0 obj
<</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>>
endobj
10 0 obj
<</LastModified(D:20130622155827+10'00')/Private 19 0 R>>
endobj
19 0 obj
<</AIMetaData 20 0 R/AIPrivateData1 21 0 R/AIPrivateData2 22 0 R/ContainerVersion 11/CreatorVersion 15/NumBlock 2/RoundtripStreamType 1/RoundtripVersion 15>>
endobj
20 0 obj
<</Length 970>>stream
+%!PS-Adobe-3.0
%%Creator: Adobe Illustrator(R) 15.0
%%AI8_CreatorVersion: 15.0.0
%%For: (Alex) ()
%%Title: (noun_project_15207.svg)
%%CreationDate: 22/06/13 3:58 PM
%%Canvassize: 16383
%%BoundingBox: 258 373 353 444
%%HiResBoundingBox: 258.5 373.0879 352.0889 443.8213
%%DocumentProcessColors: Cyan Magenta Yellow Black
%AI5_FileFormat 11.0
%AI12_BuildNumber: 399
%AI3_ColorUsage: Color
%AI7_ImageSettings: 0
%%RGBProcessColor: 0 0 0 ([Registration])
%AI3_Cropmarks: 255.5 359.5449 355.5 459.5449
%AI3_TemplateBox: 305.5 396.5 305.5 396.5
%AI3_TileBox: 26 29.5449 585 812.5449
%AI3_DocumentPreview: None
%AI5_ArtSize: 14400 14400
%AI5_RulerUnits: 2
%AI9_ColorModel: 1
%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
%AI5_TargetResolution: 800
%AI5_NumLayers: 2
%AI9_OpenToView: -491 815 1 1595 821 18 0 0 43 134 0 0 0 1 1 0 1 1 0 1
%AI5_OpenViewLayers: 77
%%PageOrigin:0 0
%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9
%AI9_Flatten: 1
%AI12_CMSettings: 00.MS
%%EndComments
endstream
endobj
21 0 obj
<</Length 16577>>stream
+%%BoundingBox: 258 373 353 444
%%HiResBoundingBox: 258.5 373.0879 352.0889 443.8213
%AI7_Thumbnail: 128 100 8
%%BeginData: 16428 Hex Bytes
%0000330000660000990000CC0033000033330033660033990033CC0033FF
%0066000066330066660066990066CC0066FF009900009933009966009999
%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
%6666006666336666666666996666CC6666FF669900669933669966669999
%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
%9933009933339933669933999933CC9933FF996600996633996666996699
%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
%000011111111220000002200000022222222440000004400000044444444
%550000005500000055555555770000007700000077777777880000008800
%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
%524C45FD6BFFA8CAA7A7A0A7A1FD76FFA8A77CA17CA17CA17CA1A7FD74FF
%A1A17CA7A1A17CA7A1A17CA7FD72FFA77CA17CA17CA17CA17CA17CA17CA8
%FD6FFFCFA77CA7A1A7A0A7A1A7A0A7A1A7A0A7A1FD6EFFA8A17CA17CA17C
%A17CA17CA17CA17CA17CA1A7FD6CFFA8A17CA7A1A17CA7A1A17CA7A1A17C
%A7A1A17CA7FD6BFFA1A17CA17CA17CA17CA17CA17CA17CA17CA17CA17CA8
%FD69FFA7A1A1A7A0A7A1A7A0A7A1A7A0A7A1A7A0A7A1A7A0A7A1FD68FFA7
%A07CA17CA17CA17CA17CA17CA17CA17CA17CA17CA17CA1A7FD67FFCAA0A1
%7CA7A1A17CA7A1A17CA7A1A17CA7A1A17CA7A1A17CA7CFFD67FFA77CA17C
%A17CA17CA17CA17CA17CA17CA17CA17CA17CA17CA7FD68FFA7A0A7A1A7A0
%A7A1A7A0A7A1A7A0A7A1A7A0A7A1A7A0A7A0FD68FFA8A07CA17CA17CA17C
%A17CA17CA17CA17CA17CA17CA17CA1A7FD4EFFA8FD19FFA7A17CA7A1A17C
%A7A1A17CA7A1A17CA7A1A17CA7A1CAA8FD4FFFA17CA7A1A8A8FD15FF7CA1
%7CA17CA17CA17CA17CA17CA17CA17CA7A8FD52FFA0A7A0A17CA7A1A7A7FF
%CFFD10FFCF7CA7A1A7A0A7A1A7A0A7A1A7A0A7A7FD54FFA8A17CA17CA17C
%A17CA07CA1A1A7A7FFCFFD0CFFA77CA17CA17CA17CA17CA17CA1A8FD55FF
%CAA0A17CA7A1A17CA7A1A17CA7A0A17CA7A1A8A8FD0AFFA77CA7A1A17CA7
%A1A17CA7CAFD56FFA1A17CA17CA17CA17CA17CA17CA17CA17CA17CA17CA8
%FD08FFA8A07CA17CA17CA17CA1A8FD4CFFCFFFA8CFA7A8A1FD04FFA7A1A7
%A0A7A1A7A0A7A1A7A0A7A1A7A0A7A1A7A0A1A8FD09FFA7A7A1A7A0A7A0A7
%CFFD44FFA8FFA8A8A7A8A1A17CA17CA17CA17CA0A7FFFFCF7CA17CA17CA1
%7CA17CA17CA17CA17CA17CA17CA17CCFFD0AFF7CA17CA17CA1A8FD42FFA8
%A7A1A17CA1A0A17CA1A0A17CA7A1A17CA7A0A7FFFFA8A17CA7A1A17CA7A1
%A17CA7A1A17CA7A1A17CA7A0A7CFFD0BFF7CA7A0A1A8FD43FFCF7CA17CA1
%7CA17CA17CA17CA17CA17CA17CA17CCFFFA87CA17CA17CA17CA17CA17CA1
%A1A77CA17CA17CA1A1FD0CFFA87CA1A8FD45FFCAA0A7A0A7A1A7A0A7A1A7
%A0A7A1A7A0A7A1A1A8FFA1A1A0A7A1A7A0A7A1A77CA7A8FFA8A7A1A7A0A7
%A0CAFD0DFFA7A8FD46FFA8A17CA17CA17CA17CA17CA17CA17CA17CA17CA7
%A8A77CA17CA17CA17CA17CA1A8FFFFFF7CA17CA17CA1A8FD0DFFA8FD48FF
%A0A7A1A17CA7A1A17CA7A1A17CA7A1A17CA7A1CA7CA7A1A17CA7A1A17CCA
%FD05FFA77CA7A1A17CFD57FFA77CA17CA17CA17CA17CA17CA17CA17CA17C
%A1A1A17CA17CA17CA1A1FD07FFA8A07CA17CA1A8CFA8CAA8CACAFFFFFFA8
%FD4CFFA8A7A0A1A0A7A1A7A0A7A1A7A0A7A1A7A0A7A1A7A0A7A1A17CA7A8
%FD09FFA0A7A1A7A0A7A0A1A0A1A7FD04FFA7A0FD4CFFCACFA1A17CA17CA1
%7CA17CA17CA17CA17CA17CA17CA1A1A8FD06FFA1A8FFFFFFA77CA17CA17C
%A17CA17CFD04FFA77CA17CA8FD4DFFCFCAA1A1A0A17CA1A0A17CA1A0A17C
%A7A0A7A8FD06FFCFA1A1A1FFFFFFA8A17CA7A1A17CA7A0FD04FFCA7CA7A1
%A17CA7FD4FFFA8A8A1A7A1A7A1A7A1A7A1A8A8FD07FFA8A77CA17CA1A8FF
%FFFF7CA17CA17CA17CCAFD04FF7CA17CA17CA17CA1A8FD47FFBD9ACBFD16
%FFA7A7A0A7A0A7A0CAFFFFFFA7A0A7A1A77CCAFD04FFA1A1A0A7A1A7A0A7
%A0A1A7FD46FF688C6894A1FD11FFA8A87CA07CA17CA17CA1A1FFFFFFA7A0
%7CA17CA1A8FFFFFFA1A17CA17CA17CA17CA17CA0A1FD44FFA18C8C8C688C
%8DBDA8FD0BFFA8CFA7A17CA7A1A17CA7A1A17CA7FD04FFA0A17CA1A8FFFF
%FFA8A17CA7A1A17CA7A1A17CA7A1A1A0FD43FF93688C688C688C688C6FC3
%CAFD05FFA8A87CA076A17CA17CA17CA17CA17CA17CCAFFFFA8A77CA0A1FF
%FFFFA8A17CA17CA17CA17CA17CA17CA17CA17CA8FD40FFCA688D8C8D688D
%8C8D688C68939ACAFD06FFA8A7A0A1A0A7A1A7A0A7A1A7A0A7A7FFFFFFA7
%A1A1FD04FFA7A0A7A0A7A1A7A0A7A1A7A0A7A1A7A0A7A0A7FD3FFF9A8C68
%8C688C688C688C688C688C6893A1FD07FFA7A17CA17CA17CA17CA17CA1CF
%FFFFCF7CFD04FFA87CA17CA17CA17CA17CA17CA17CA17CA17CA17CA1A8FD
%3DFF938C8C688D8C8C688D8C8C688D8C8C688C8C9AA1FD06FFCAA1A7A0A1
%7CA7A1A17CCFFFFFCFCFFD04FFA0A17CA7A1A17CA7A1A17CA7A0A17CA7A1
%A17CA7A0A1A7FD3BFFC4688C688C688C688C688C688C688C688C688C688C
%69C3A8FD05FFA8A87CA07CA17CA0A1FD07FF7CA17CA17CA17CA17CA17CA1
%7CA7A8A87CA17CA17CA17CA0A1FD3AFF948C8C8D688D8C8D688D8C8D688D
%8C8D688D8C8D688C689394CAFD06FFA8A8A1A17CA7FD06FFA7A7A1A7A0A7
%A1A7A0A7A0A1A1FD04FFCAA0A7A0A7A1A77CA7FD39FFCA8C688C688C688C
%688C688C688C688C688C688C688C688C688C68939ACAFD06FFA7A17CCFFD
%04FFA8A07CA17CA17CA17CA17CA1A8FD06FFA77CA17CA17CA1A8FD39FFC3
%688C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688C8C9A
%A1FD06FFCAA8FFFFFFA8A7A0A17CA7A1A17CA1A0A8CFFD07FFCFA7A0A17C
%A1A8FD3AFF6F8C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C689BA8FD08FFA17CA17CA17CA17CA07CCFFD05FFCAA8FF
%FFFFA8A17CA0A1FD3AFFCA8D8C8D688D8C8D688D8C8D688D8C8D688D8C8D
%688D8C8D688D8C8D688D8C8D688C688D93CAFD06FFA8CAA1A1A0A7A0A1A7
%FD06FFCA7CA7FD04FFA8A1A1FD3BFF9A688C688C688C688C688C688C688C
%688C688C688C688C688C688C688C688C688C688C688C68939ACAFD06FFA7
%A17CA7A8FD05FFA8A77CA17CA7FD04FFA7CAFD3BFF8D8C688D8C8C688D8C
%8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C68
%8C8C94A1FD06FFCFFD06FFA1A17CA7A1A17CA8FD3FFFA18C688C688C688C
%688C688C688C688C688C688C688C688C688C688C688C688C688C688C688C
%688C688C688C689AA8FD08FFA87CA17CA17CA17CA17CA8FD0EFFA8FD2FFF
%BC8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C
%8D688D8C8D688D8C8D688D8C8D688C688C93C3FD06FFA8CAA1A1A0A7A1A7
%A0A7A0CFFD0BFFCAA1A7FD2EFFCA688C688C688C688C688C688C688C688C
%688C688C688C688C688C688C688C688C688C688C688C688C688C688C688C
%688C68939ACAFD06FFA8A77CA17CA17CA17CCFFD07FFCAA1A17CA17CFD2E
%FFA18C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C
%8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688C8C93A1FD07FFFD
%04A17CA1A1FD05FFA7A7A0A17CA7A1A1A8FD2DFF93688C688C688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C689AA1FD05FF7CA17CA17CA1A1FD04
%FFA77CA17CA17CA17CA8FD0FFFA1FD14CAFD08FFCA8C8C688D8C8D688D8C
%8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D68
%8D8C8D688D8C8D688D8C8D688D8C8D688D688C93C3CAFFFFCFA0A7A0A7A1
%A1A7FD04FFA8A0A7A0A7A1A1A7FD0DFFCA688C688C688C688C688C688C68
%8C688C688C688C688CA8FD07FF9A8C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C9BFFFFA77CA17CA17CA0A7FFFFFFA8
%A77CA17CA17CA7FD0CFFCA688C8C8C688C8C8C688C8C8C688C8C8C688C8C
%8C688C8CCAFD07FF93688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C68
%8D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C
%8C688D8C8C688D8C8C688CCAFFA8A1A1A17CA7A0A1A8FFFFFFA8A7A0A17C
%A7A1FD0BFFCA688C688C688C688C688C688C688C688C688C688C688C688C
%A8FD06FFC3688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C689AFFFFA1A17CA17CA17CA1A8FFFFFFA8A17CA17CA1CA
%FD0AFF8C8C688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8CFD07
%FF938C688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C
%8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D68
%8D8C8D688D8CCAFFFFA0A7A0A7A1A77CA7FD04FFA8A1A0A7A1FD09FFCA68
%8C688C688C688C688C688C688C688C688C688C688C688C688CCAFD05FFA8
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C93FFFFA87CA17CA17CA7A8FD05FFA7A17CA1A8FD08FF8C8C68
%8D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C68FD06FFC3688D
%8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C
%688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D
%8C8C688CA1FFCFA7A0A1A1FD09FFA1A17CCAFD06FFCB688C688C688C688C
%688C688C688C688C688C688C688C688C688C688CA8FD05FF938C688C688C
%688C688C688C688C688C688C688C688C688C688C688C688C688C688C688C
%688C688C688C688C688C688C688C688C688C688C688C688C688C688C688C
%6893CAFFA7A7A8FD07FFA8A77CA17CA0A1FD06FF8D8C8C8D688D8C8D688D
%8C8D688D8C8D688D8C8D688D8C8D688D8C8C8CFD05FFCA8C688D8C8D688D
%8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D
%688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D
%68C3FD08FFA8CAA1A17CA7A1A77CA8FD05FF8C8C688C688C688C688C688C
%688C688C688C688C688C688C688C688C688CA8FD04FF9A688C688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C68CAFD05FFCAA1A17CA17CA17CA17CA17CFD04FF8D8C8C8C688D8C8C68
%8D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688C8CCAFD04FFFD048C68
%8D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C
%8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C68
%8D8C8C688C9AFFFFFFCAA77CA1A1A17CA7A1A17CA7A0A1CFFFFF698C688C
%688C688C688C688C688C688C688C688C688C688C688C688C688C688CA8FF
%FFFFA18C688C688C688C688C688C688C688C688C688C688C688C688C688C
%688C688C688C688C688C688C688C688C688C688C688C688C688C688C688C
%688C688C688C688C688C688C688CA1FFA8A17CA17CA17CA17CA17CA17CA1
%7CCFFF938C688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D68
%8D8C8D688D8CFD04FF9A688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D
%688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D
%8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C94FFFFA7A1A0A7A1A7
%A0A7A1A7A0A7A1A1A8698C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688CCAFFFFCA688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%C3FFFF7CA17CA17CA17CA17CA17CA17CA88C688D8C8C688D8C8C688D8C8C
%688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C68FFFFFFCAC3938C688C
%8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C
%688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D
%8C8C688D8C8C688C93FFFFCAA0A17CA7A1A17CA7A1A17CA1A7688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688CA8
%FD05FFA194688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C688C9AFFA8A17CA17CA17CA17CA17CA17C
%A78D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D
%688D8C8C8CFD09FFA193688C8C8D688D8C8D688D8C8D688D8C8D688D8C8D
%688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D
%8C8D688D8C8D688D8C8D688D8C8D688D8C8DCAFFA8A1A0A7A1A7A0A7A1A1
%7CA7A1688C688C688C688C688C688C688C688C688C688C688C688C688C68
%8C688C688C688CA8FD0AFFCA938D688C688C688C688C688C688C688C688C
%688C688C688C688C688C688C688C688C688C688C688C688C688C688C688C
%688C688C688C688C688C688C688C688C688C689AFFFFA1A17CA17CA17CA1
%A0A7A7FF8D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C
%8C688D8C8C688C8CCAFD0CFFCAC3938C688C8C8C688D8C8C688D8C8C688D
%8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C
%688D8C8C688D8C8C688D8C8C688D8C8C688D8CCAFFFFA0A17CA7A1CAA8FD
%04FF688C688C688C688C688C688C688C688C688C688C688C688C688C688C
%688C688C688CA8FD0FFFA19A688C688C688C688C688C688C688C688C688C
%688C688C688C688C688C688C688C688C688C688C688C688C688C688C688C
%688C688C688C688C688C688C688C93FFFFCAA7CFA8FD07FF8D8C8D688D8C
%8D688D8C8D688D8C8D688D8C8D688D8C8C688C8C938C8D8C8C688D8CFD13
%FFA193688C8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D8C
%8C688D8C93688C688C688D8C8D688D8C8D688D8C8D688D8C8D688D8C8D68
%8D8C9AFD0DFF688C688C688C688C688C688C688C688C688C688C688C939A
%A1CACACAA1C39A93688CCAFD14FFCA9493688C688C688C688C688C688C68
%8C688C688C688C688C68939AC3A1CACACAA1C3938C688C688C688C688C68
%8C688C688C688C688C688C688CA1FD0DFF8C688D8C8C688D8C8C688D8C8C
%688D8C8C688C8C9AA8FD0AFFCA93CBFD16FFCAC3938C688C8C8C688D8C8C
%688D8C8C688D8C8C688C93CAFD0AFFCA9A688C8C8C688D8C8C688D8C8C68
%8D8C8C688D8C8C93FD0EFF688C688C688C688C688C688C688C688C688C68
%CAFD0EFFA8FD19FFA89A688C688C688C688C688C688C688C688C9AFD0EFF
%CA698C688C688C688C688C688C688C688C688C68A1FFFFA7CFFD0AFF8D68
%8D8C8D688D8C8D688D8C8D688D8C8C93FD07FFA1C4A1CACAFD21FFA19A68
%8C8C8D688D8C8D688D8C93CAFD05FFCBCAA1C4C3CBFD06FF9A8C688D8C8D
%688D8C8D688D8C8D688D8C8DCAFFA8A1A0A8A8FD08FF688C688C688C688C
%688C688C688C688C93FD05FFA193688C688C688C93C4FD21FFCA9A93688C
%688C688C6893CAFD04FFCA9393688C688C68939AFD05FF9A8C688C688C68
%8C688C688C688C688C93FFFFA77CA17CA1A1FD07FF8D8C8C688D8C8C688D
%8C8C688D8C8C8DFD04FFCA938C688C8C8C688D8C8C6894CAFD04FFC39AC3
%9ABD9AC39ABD9AC39ABD9AC39ABD9AC39ABD9BFD08FFCA938D688C8C8CA8
%FFFFFFCA9A688C688D8C8C688C688C8CCAFD04FF938C688D8C8C688D8C8C
%688D8C8C68CAFFFF7CA7A1A17CA1A1CFFD05FF688C688C688C688C688C68
%8C688C68CAFFFFFFC3688C688C688C688C688C688C688CA1FFFFFFA16868
%8C688C688C688C688C688C688C688C688C688C689AA1FD07FFA8A1688CA1
%FFFFFFA88C688C688C688C688C688C688C68A1FD04FF688C688C688C688C
%688C688C688DA8FFA7A07CA17CA17CA17CA8FD04FF8D8C8D688D8C8D688D
%8C8D688D68C3FFFFFFCA688C8C8D688D8C8D688D8C8D688D8C8CCAFFFFFF
%948C8C8D688D8C8D688D8C8D688D8C8D688D8C8D688D688C93C3CAFD07FF
%CAFFFFFFCA93688D8C8D688D8C8D688D8C8D688D68C3FFFFFFC3688D8C8D
%688D8C8D688D8C8C9AFFFFA7A0A7A1A7A0A7A1A17CCFFFFFFF688C688C68
%8C688C688C688C688DCAFFFFFF688C688C688C688C688C688C688C688C68
%93CAFFFFCA688C688C688C688C688C688C688C688C688C688C688C688C68
%8D93C4CAFD08FF93688C688C688C688C688C688C688C688C68CAFFFFFF93
%688C688C688C688C688C68CAFFCF7CA17CA17CA17CA17CA17CCAFFFF8C68
%8D8C8C688D8C8C688D8C8C9AFFFFFF948C8C8C688D8C8C688D8C8C688D8C
%8C688D68C3FFFFFF9A688D8C8C688D8C8C688D8C8C688D8C8C688D8C8C68
%8D8C8C688C68939ACAFD05FFC3688D8C8C688D8C8C688D8C8C688D8C8C68
%8C93FFFFFFA18C688D8C8C688D8C8C6893FFFFFD04A17CA7A1A17CA7A1A1
%7CCFFF688C688C688C688C688C688C68CAFFFFA88C688C688C688C688C68
%8C688C688C688C688C68FFFFFFA18C688C688C688C688C688C688C688C68
%8C688C688C688C688C688C688C6894A8FFFFFF8D8C688C688C688C688C68
%8C688C688C688C688CA1FFFFCA688C688C688C688C688C9AFFA8A17CA17C
%A17CA17CA17CA17CA17CCA8C688C8C8C688C8C8C688C8C93FFFFFFC3688D
%8C8D688D8C8D688D8C8D688D8C8D688D8C8CA1FFFFFF688C8C8C688C8C8C
%688C8C8C688C8C8C688C8C8C688C8C8C688C8C8C688C68CAFFFFCA8C688D
%8C8D688D8C8D688D8C8D688D8C8D688D68BDFFFFFF93688D8C8D688D8C8C
%8CFFFFCA7CA7A1A7A0A7A1A7A0A7A1A7A0A7A18D9368938D9368938D9368
%9393FFFFFF938C688C688C688C688C688C688C688C688C688C689AFFFFFF
%9368938D9368938D9368938D9368938D9368938D9368938D9368938D9368
%93CAFFFFC3688C688C688C688C688C688C688C688C688C688C93FFFFFF94
%8C688C688C688C689AFFFFA1A17CA17CA17CA17CA17CA17CA17CFD04FFCA
%FFFFFFCAFFFFFFCAFD04FF938C8C688D8C8C688D8C8C688D8C8C688D8C8C
%688C93FD05FFCAFFFFFFCAFFFFFFCAFFFFFFCAFFFFFFCAFFFFFFCAFFFFFF
%CAFFFFFFCAFFFFFF9A8C8C8C688D8C8C688D8C8C688D8C8C688D8C8C6893
%FFFFFFC3688C688D8C8C688CA1FFA8A1A1A17CA7A1A17CA7A1A17CA7A0CF
%FD11FF688C688C688C688C688C688C688C688C688C688C6894FD25FF9A68
%8C688C688C688C688C688C688C688C688C688C68FFFFFF9A8C688C688C68
%8C68FFFFA77CA17CA17CA17CA17CA17CA17CA8FD12FF938C8D688D8C8D68
%8D8C8D688D8C8D688D8C8D688C93FD25FF9A8C8C8D688D8C8D688D8C8D68
%8D8C8D688D8C8D6893FFFFFFC3688D688D8C8D68C3FFFFA0A7A1A7A0A7A1
%A7A0A7A1A77CCAFD13FF938C688C688C688C688C688C688C688C688C688C
%689AFD25FF9B688C688C688C688C688C688C688C688C688C688C68FFFFFF
%938C688C688C688CA2FFFFA77CA17CA17CA17CA17CA17CA1CAFD13FFBD68
%8D8C8C688D8C8C688D8C8C688D8C8C688D8C8CA1FD25FFA18C688D8C8C68
%8D8C8C688D8C8C688D8C8C688D689AFFFFFF9A688C8C8C688C93FD04FFCA
%7CA7A1A17CA7A1A17CA7CFFD14FFA18C688C688C688C688C688C688C688C
%688C688C68CAFD26FF688C688C688C688C688C688C688C688C688C688CA1
%FFFFFFCAC3938C688C68C3FD05FFA87CA17CA17CA17CA0A7FD16FF938C8C
%8D688D8C8D688D8C8D688D8C8D688D689AFD27FFBC688D8C8D688D8C8D68
%8D8C8D688D8C8D688C8CFD07FFCAC38D8DCAFD06FFCAA0A7A0A7A1A1A7FD
%17FFC4688C688C688C688C688C688C688C688C688CA8FD27FFCA8C688C68
%8C688C688C688C688C688C688C68C3FD0AFFA8FD07FFCFA77CA17CA1A1FD
%19FF9A688D8C8C688D8C8C688D8C8C688D8C8C9AFD29FFA18C688D8C8C68
%8D8C8C688D8C8C688D689AFD14FFCAA7A0A1A0FD1BFF93688C688C688C68
%8C688C688C688C94FD2BFF9A8C688C688C688C688C688C688C6893CAFD15
%FFA8A17CCAFD1CFFBD8C8C688D8C8D688D8C8C688C9BFD2DFFA18D688C68
%8D8C8D688D8C8C68BCFD18FFA7CAFD1EFFCA938C688C688C688C6893A1FD
%2FFFA89A688C688C688C688C93C3FD3BFFCAC3939A939A9ACAFD33FFCBA1
%9A939A94C3A1FDA5FFFF
%%EndData
endstream
endobj
22 0 obj
<</Length 21057>>stream
+0000000016 00000 n
+0000000156 00000 n
+0000022171 00000 n
+0000000000 00000 f
+0000024532 00000 n
+0000024599 00000 n
+0000064018 00000 n
+0000022222 00000 n
+0000022562 00000 n
+0000025012 00000 n
+0000024899 00000 n
+0000023745 00000 n
+0000023971 00000 n
+0000024019 00000 n
+0000024783 00000 n
+0000024814 00000 n
+0000024667 00000 n
+0000024698 00000 n
+0000025086 00000 n
+0000025260 00000 n
+0000026280 00000 n
+0000042909 00000 n
+0000064047 00000 n
+trailer
<</Size 24/Root 1 0 R/Info 23 0 R/ID[<A0B43D3BE9404E559B188985E5B021C8><89A09C775629479581326F0B9EF6E592>]>>
startxref
64215
%%EOF
--- /dev/null
+++ b/admin/logo.svg
@@ -1,1 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100px"
+ height="100px" viewBox="0 -25.635 100 100" enable-background="new 0 -25.635 100 100" xml:space="preserve">
+<g id="docs">
+ <path fill="#C2A385" d="M86.108-9.909l5.229,9.952c0,0-1.832,0.083-5.297,1.95c-2.312,1.249-6.468,6.246-6.468,6.246L71.827-2.909
+ c0,0,4.201-3.996,6.513-5.242C81.805-10.022,86.108-9.909,86.108-9.909"/>
+ <path fill="#C2A385" d="M65.604,20.731l-3.152-9.868c0,0-5.441,3.56-8.017,4.074c-1.008,0.202-1.93,0.335-2.749,0.425
+ L65.604,20.731z"/>
+ <path fill="#C2A385" d="M72.326,23.321c0.268-0.226,0.537-0.44,0.804-0.616c3.104-2.054,6.139-3.685,6.268-3.755l1.882-1.005
+ l1.369,1.634l2.864,3.417l3.198-4.334L76.68,9.783l-8.74,11.847L72.326,23.321z"/>
+ <path fill="#C2A385" d="M39.918,10.823l4.825,1.86l3.33,0.212c0.04,0.001,0.269,0.015,0.652,0.015c0.91,0,2.798-0.072,5.196-0.551
+ c1.427-0.284,5.007-2.332,7.092-3.695l2.889-1.888l1.05,3.285l2.496,7.812l5.889-7.985l-4.625,0.163l1.348-6.225L55.133,0.593
+ l-2.095,9.667c-0.531-2.599-1.841-5.727-1.841-5.727L37.709,6.055c0,0,0.885,2.206,1.586,4.529L39.918,10.823z"/>
+ <path fill="#C2A385" d="M91.233,45.562c-1.102-0.691-2.323-1.142-3.415-1.433l-3.779,9.804c1.932,1.246,5.197,5.738,5.197,5.738
+ l7.336-9.206C96.572,50.466,93.162,46.771,91.233,45.562z"/>
+ <path fill="#C2A385" d="M93.192,32.166l-3.656,1.224c-0.019,0.007-1.779,0.613-4.117,2.069l2.817,4.868l0.626,1.08
+ c3.306-0.562,7.727-1.922,7.727-1.922l-2.332-15.261c0,0-2.934,1.277-5.852,2.221l2.318,2.765L93.192,32.166z"/>
+ <path fill="#C2A385" d="M79.272,25.999l0.864,0.334l0.46,0.801l3.503,6.05c2.646-1.636,4.611-2.287,4.611-2.287l-8.075-9.632
+ c0,0-2.584,1.391-5.376,3.188L79.272,25.999z"/>
+</g>
+<g id="trunk">
+ <circle fill="#C00000" cx="66.019" cy="52.945" r="7.877"/>
+ <circle fill="#C00000" cx="22.693" cy="52.945" r="7.877"/>
+ <path fill="#C00000" d="M22.693,42.441c1.915,0,3.705,0.522,5.251,1.421V28.001H12.191L3,37.192v14.439h9.281
+ C12.931,46.459,17.347,42.441,22.693,42.441z"/>
+ <path fill="#C00000" d="M55.925,50.075l-9.583-3.695H30.88c1.186,1.476,1.978,3.28,2.225,5.252h22.502
+ C55.674,51.1,55.78,50.58,55.925,50.075z"/>
+ <path fill="#C00000" d="M79.312,28.328L39.961,13.149l-9.384,24.335l26.381,10.174c1.824-3.115,5.198-5.218,9.062-5.218
+ c5.791,0,10.503,4.712,10.503,10.502c0,0.744-0.081,1.471-0.229,2.173l4.713,1.817L86.95,41.52L79.312,28.328z"/>
+</g>
+</svg>
--- /dev/null
+++ b/admin/massdelete.sh
@@ -1,1 +1,10 @@
+for line in `curl "http://localhost:5984/disclosr-foidocuments/_design/app/_view/byAgencyID?reduce=false&keys=%5B\"5716ce0aacfe98f7d638b7a66b7f1040\"%5D&limit=600" | xargs -L1`; do
+# echo $line
+ id=`echo $line | grep -Po '_id:.*?[^\\\],' | perl -pe 's/_id://; s/^//; s/,$//'`
+ rev=`echo $line | grep -Po 'rev:.*?[^\\\],'| perl -pe 's/rev://; s/^//; s/,$//'`
+ if [ -n "$id" ]; then
+ echo "curl -X DELETE http://localhost:5984/disclosr-foidocuments/$id?rev=$rev"
+ curl -X DELETE http://localhost:5984/disclosr-foidocuments/$id?rev=$rev
+ fi
+done;
--- a/admin/refreshDesignDoc.php
+++ b/admin/refreshDesignDoc.php
@@ -8,21 +8,13 @@
$obj->_id = "_design/" . urlencode("app");
$obj->language = "javascript";
$obj->views->all->map = "function(doc) { emit(doc._id, doc); };";
-$obj->views->byDate->map = "function(doc) { emit(doc.date, doc); };";
+$obj->views->byDate->map = "function(doc) { if (doc.title != \"Disclosure Log Updated\") { emit(doc.date, doc); } };";
$obj->views->byDateMonthYear->map = "function(doc) { emit(doc.date, doc); };";
$obj->views->byDateMonthYear->reduce = "_count";
$obj->views->byAgencyID->map = "function(doc) { emit(doc.agencyID, doc); };";
$obj->views->byAgencyID->reduce = "_count";
-$obj->views->fieldNames->map = '
-function(doc) {
-for(var propName in doc) {
- emit(propName, doc._id);
- }
-
-}';
-$obj->views->fieldNames->reduce = 'function (key, values, rereduce) {
- return values.length;
-}';
+$obj->views->fieldNames->map = 'function(doc) { for(var propName in doc) { emit(propName, doc._id); }}';
+$obj->views->fieldNames->reduce = 'function (key, values, rereduce) { return values.length; }';
// allow safe updates (even if slightly slower due to extra: rev-detection check).
$foidb->save($obj, true);
--- a/charts.php
+++ /dev/null
@@ -1,133 +1,1 @@
-<?php
-include_once('include/common.inc.php');
-include_header('Charts');
-$db = $server->get_db('disclosr-agencies');
-?>
-<div class="foundation-header">
- <h1><a href="about.php">Charts</a></h1>
- <h4 class="subheader">Lorem ipsum.</h4>
-</div>
-<div id="scores" style="width:900px;height:500px;"></div>
-<div id="employees" style="width:1000px;height:900px;"></div>
-<script id="source">
- window.onload = function() {
- $(document).ready(function() {
- var d1 = [];
- var scorelabels = [];
- <?php
- try {
- $rows = $db->get_view("app", "scoreHas?group=true", null, true)->rows;
-
- $dataValues = Array();
- foreach ($rows as $row) {
- $dataValues[$row->value] = $row->key;
- }
- $i = 0;
- ksort($dataValues);
- foreach ($dataValues as $value => $key) {
-
- echo " d1.push([$i, $value]);" . PHP_EOL;
- echo " scorelabels.push('$key');" . PHP_EOL;
- $i++;
- }
- } catch (SetteeRestClientException $e) {
- setteErrorHandler($e);
- }
- ?>
- function scoretrackformatter(obj) {
- if (scorelabels[Math.floor(obj.x)]) {
- return (scorelabels[Math.floor(obj.x)])+"="+obj.y;
-
- } else {
- return "";
- }
- }
- function scoretickformatter(val, axis) {
- if (scorelabels[Math.floor(val)]) {
- return '<p style="margin-top:8em;-webkit-transform:rotate(-90deg);">'+(scorelabels[Math.floor(val)])+"</b>";
-
- } else {
- return "";
- }
- }
- Flotr.draw(document.getElementById("scores"), [ {data: d1}], {
- HtmlText: true,
- bars : {
- show : true
- },
- mouse : {
- track : true,
- relative : true,
- trackFormatter: scoretrackformatter
- },yaxis: {
- autoscaling: true
- },
- xaxis: {
- autoscaling: true,
- minorTickFreq: 0.6,
- noTicks : scorelabels.length,
- tickFormatter: scoretickformatter
- }
- });
-
-
-
-
-
-
-
-
-var emplabels = [];
-function emptrackformatter(obj) {
-
- return (obj.series.label)+" = "+obj.y+" in "+emplabels[Math.floor(obj.x)];
-
- }
- function emptickformatter(val, axis) {
- if (emplabels[Math.floor(val)]) {
- return '<p style="margin-top:8em;-webkit-transform:rotate(-90deg);">'+(emplabels[Math.floor(val)])+"</b>";
-
- } else {
- return "";
- }
- }
-function onDataReceived(series) {
- emplabels = series.labels;
- Flotr.draw(document.getElementById("employees"), series.data, {
- mouse : {
- track : true,
- relative : true,
- trackFormatter: emptrackformatter
- },yaxis: {
- max: 10000,
- scaling: 'logarithmic'
- },
- xaxis: {
- minorTickFreq: 1,
- noTicks: emplabels.length,
- showMinorLabels: true,
- tickFormatter: emptickformatter
- },
- legend: {
- show: false
- }
- });
- }
-
- $.ajax({
- url: "admin/exportEmployees.csv.php?format=json",
- method: 'GET',
- dataType: 'json',
- success: onDataReceived
- });
-
-
- });
- };
-
-</script>
-
-<?php
-include_footer();
-?>
--- a/documents/about.php
+++ b/documents/about.php
@@ -5,6 +5,7 @@
include_once('../include/common.inc.php');
?>
<h1>About</h1>
+Written and managed by Alex Sadleir (maxious [at] lambdacomplex.org)
<?php
include_footer_documents();
?>
--- a/documents/agency.php
+++ b/documents/agency.php
@@ -19,7 +19,7 @@
<br>
<?php
try {
- if ($_REQUEST['id']) {
+ if (isset($_REQUEST['id'])) {
$rows = $foidocsdb->get_view("app", "byAgencyID", $_REQUEST['id'], false, false, false)->rows;
foreach ($rows as $row) {
//print_r($rows);
@@ -31,6 +31,12 @@
} else {
$rows = $foidocsdb->get_view("app", "byAgencyID?group=true", null, false, false, true)->rows;
if ($rows) {
+function cmp($a, $b)
+{
+ global $idtoname;
+ return strcmp($idtoname[$a->key], $idtoname[$b->key]);
+}
+usort($rows, "cmp");
foreach ($rows as $row) {
echo '<a href="agency.php?id=' . $row->key . '">' . $idtoname[$row->key] . " (" . $row->value . " records)</a> <br>\n";
}
@@ -42,3 +48,4 @@
echo "<a class='btn btn-large btn-primary' href='?end_key=$endkey' style='float:right;'>next page <i class='icon-circle-arrow-right icon-white'></i></a>";
include_footer_documents();
?>
+
--- a/documents/charts.php
+++ b/documents/charts.php
@@ -13,10 +13,10 @@
?>
<div class="foundation-header">
<h1><a href="about.php">Charts</a></h1>
- <h4 class="subheader">Lorem ipsum.</h4>
+ <h4 class="subheader"></h4>
</div>
<div id="bydate" style="width:1000px;height:300px;"></div>
-<div id="byagency" style="width:1200px;height:300px;"></div>
+<div id="byagency" style="width:1000px;height:1400px;"></div>
<script id="source">
window.onload = function () {
$(document).ready(function () {
@@ -59,7 +59,7 @@
mode: 'x'
},
HtmlText: false,
- title: 'Time'
+ title: 'Disclosure Log entries added by Date'
};
// Draw graph with default options, overwriting with passed options
@@ -98,12 +98,12 @@
var agencylabels = [];
function agencytrackformatter(obj) {
- return agencylabels[Math.floor(obj.x)] + " = " + obj.y;
+ return agencylabels[Math.floor(obj.y)] + " = " + obj.x;
}
function agencytickformatter(val, axis) {
if (agencylabels[Math.floor(val)]) {
- return '<p style="margin-top:8em;-webkit-transform:rotate(-90deg);">' + (agencylabels[Math.floor(val)]) + "</b>";
+ return (agencylabels[Math.floor(val)]) ;
} else {
return "";
@@ -117,7 +117,7 @@
$dataValues = Array();
$i = 0;
foreach ($rows as $row) {
- echo " d2.push([".$i.", $row->value]);" . PHP_EOL;
+ echo " d2.push([ $row->value,$i]);" . PHP_EOL;
echo " agencylabels.push(['".str_replace("'","",$idtoname[$row->key])."']);" . PHP_EOL;
$i++;
@@ -131,9 +131,10 @@
document.getElementById("byagency"),
[d2],
{
+ title: "Disclosure Log entries by Agency",
bars: {
show: true,
- horizontal: false,
+ horizontal: true,
shadowSize: 0,
barWidth: 0.5
},
@@ -143,14 +144,14 @@
trackFormatter: agencytrackformatter
},
yaxis: {
- min: 0,
- autoscaleMargin: 1
- },
- xaxis: {
minorTickFreq: 1,
noTicks: agencylabels.length,
showMinorLabels: true,
tickFormatter: agencytickformatter
+ },
+ xaxis: {
+ min: 0,
+ autoscaleMargin: 1
},
legend: {
show: false
--- a/documents/datagov-export-groups.py
+++ b/documents/datagov-export-groups.py
@@ -10,7 +10,11 @@
# Instantiate the CKAN client.
#ckan = ckanclient.CkanClient(base_location='http://localhost:5000/api', api_key='b47b24cd-591d-40c1-8677-d73101d56d1b')
api_key = 'ff34526e-f794-4068-8235-fcbba38cd8bc'
-ckan = ckanclient.CkanClient(base_location='http://data.disclosurelo.gs/api',
+server = 'data.disclosurelo.gs'
+api_key = 'c30eb6f5-0f90-47e0-bf05-9b1b4e3a461a'
+server = 'ckan.data.gov.au'
+
+ckan = ckanclient.CkanClient(base_location='http://' + server + '/api',
api_key=api_key)
couch = couchdb.Server('http://127.0.0.1:5984/')
#couch = couchdb.Server('http://192.168.1.113:5984/')
--- a/documents/datagov-export.py
+++ b/documents/datagov-export.py
@@ -14,6 +14,7 @@
import tempfile
def add_package_resource_cachedurl(ckan, package_name, url, name, format, license_id, size,**kwargs):
+ excluded_apis = "recent-earthquakes,sentinel-hotspots,abc-local-stations,action-bus-service-gtfs-feed-act,current-and-future-road-reports-traffic-restrictions-in-south-australia,current-and-future-road-reports-traffic-restrictions-in-south-australia,current-and-future-road-reports-traffic-restrictions-in-south-australia,current-and-future-road-reports-traffic-restrictions-in-south-australia,current-and-future-road-reports-traffic-restrictions-in-south-australia,current-and-future-road-reports-traffic-restrictions-in-south-australia,journey-planner-data-act,live-traffic-cameras-nsw,precis-forecast-national,precis-forecast-national,precis-forecast-new-south-wales,precis-forecast-new-south-wales,precis-forecast-northern-territory,precis-forecast-northern-territory,precis-forecast-queensland,precis-forecast-queensland,precis-forecast-south-australia,precis-forecast-south-australia,precis-forecast-tasmania,precis-forecast-tasmania,precis-forecast-victoria,precis-forecast-victoria,precis-forecast-western-australia,precis-forecast-western-australia,register-of-penalty-notices-nsw,sentinel-hotspots,trove-people-and-organisations-data,weather-data-services-radar,abc-local-stations,act-emergency-services-agency-esa-28093-current-incidents,act-emergency-services-agency-esa-news-alerts,act-government-news-and-events,act-government-summaries-of-cabinet-outcomes,act-magistrates-court-judgements,act-supreme-court-judgements,act-supreme-court-sentences,actpla-latest-news,all-vacant-act-government-jobs,community-engagement-current-engagements,community-engagement-news,edd-media-releases,edd-news-and-events,freedom-of-information-foi-summaries,libraries-act-announcements,nsw-rural-fire-service-current-incidents,nsw-rural-fire-service-major-updates,precis-forecast-new-south-wales,precis-forecast-south-australia,precis-forecast-tasmania,precis-forecast-victoria,sentinel-hotspots,south-australian-road-crash-statistics,trove-people-and-organisations-data,weather-warnings-for-new-south-wales-australian-capital-territory,weather-warnings-for-northern-territory,weather-warnings-for-queensland,weather-warnings-for-south-australia,weather-warnings-for-tasmania,weather-warnings-for-victoria,weather-warnings-for-western-australia".split(",")
if "xls" in url:
format = "xls"
if "pdf" in url:
@@ -27,8 +28,12 @@
if mime_type in ["application/xlsx","application/x-xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]:
format = "xlsx"
- if content != None:
- tf = tempfile.NamedTemporaryFile(delete=False)
+ #put file extensions on for windows users downloading files
+ suffix = name.encode("ascii","ignore").replace("/","")
+ if len(suffix) < 5 or (suffix[-4] != "." and suffix[-5] != "."):
+ suffix = suffix + "." + format
+ if content != None and package_name not in excluded_apis:
+ tf = tempfile.NamedTemporaryFile(suffix=suffix)
tfName = os.path.abspath(tf.name)
print tfName
tf.seek(0)
@@ -196,7 +201,7 @@
pkg_name = filter(lambda x: x in '0123456789abcdefghijklmnopqrstuvwxyz-_',
doc.value['url'].replace("http://data.gov.au/dataset/", '').replace('/', '')[:100]);
print pkg_name
- if pkg_name != "":
+ if pkg_name != "" :
#add to or create organization using direct API
agency = doc.value['metadata']["Agency"]
@@ -262,7 +267,7 @@
'author': creator,
'maintainer': creator,
'license_id': get_license_id(doc.value['metadata']['DCTERMS.License']),
- 'notes': html2text.html2text(doc.value['metadata']['Description']).replace('AC/a!a','-').replace('AC/a!aC/',"'").replace("AC/a!E",":")replace("A "," "),
+ 'notes': html2text.html2text(doc.value['metadata']['Description']).replace('AC/a!a','-').replace('AC/a!aC/',"'").replace("AC/a!E",":").replace("A "," "),
'owner_org': org_id,
'extras': extras,
'private': (pkg_name not in goodcsvdata and pkg_name not in goodotherdata)
--- a/documents/genericScrapers.py
+++ b/documents/genericScrapers.py
@@ -199,10 +199,21 @@
def getRows(self, table):
return table.find_all('tr')
+ def getDocHash(self, id,date, url):
+ if id.string is None:
+ print "no id, using date as hash"
+ return scrape.mkhash(
+ self.remove_control_chars(
+ url + (''.join(date.stripped_strings))))
+ else:
+ return scrape.mkhash(
+ self.remove_control_chars(
+ url + (''.join(id.stripped_strings))))
+
def getDate(self, content, entry, doc):
strdate = ''.join(content.stripped_strings).strip()
(a, b, c) = strdate.partition("(")
- strdate = self.remove_control_chars(a.replace("Octber", "October").replace("1012","2012")replace("Janrurary", "January").replace("1012","2012"))
+ strdate = self.remove_control_chars(a.replace("Octber", "October").replace("1012","2012").replace("Janrurary", "January").replace("1012","2012"))
print strdate
try:
edate = parse(strdate, dayfirst=True, fuzzy=True).strftime("%Y-%m-%d")
@@ -240,14 +251,7 @@
description, notes) = self.getColumns(columns)
print self.remove_control_chars(
''.join(id.stripped_strings))
- if id.string is None:
- dochash = scrape.mkhash(
- self.remove_control_chars(
- url + (''.join(date.stripped_strings))))
- else:
- dochash = scrape.mkhash(
- self.remove_control_chars(
- url + (''.join(id.stripped_strings))))
+ dochash = self.getDocHash(id,date,url)
doc = foidocsdb.get(dochash)
if doc is None:
--- a/documents/robots.txt
+++ b/documents/robots.txt
@@ -3,4 +3,5 @@
User-agent: *
Disallow: /admin/
+Disallow: /viewDocument.php
Sitemap: http://disclosurelo.gs/sitemap.xml.php
--- a/documents/runScrapers.sh
+++ b/documents/runScrapers.sh
@@ -1,7 +1,9 @@
+#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+echo $DIR
cd $DIR
echo "" > /tmp/disclosr-error
-for f in scrapers/*.py; do
+for f in $DIR/scrapers/*.py; do
echo "Processing $f file..";
md5=`md5sum /tmp/disclosr-error`
python $f 3>&1 1>&2 2>&3 | tee --append /tmp/disclosr-error;
--- a/documents/scrape.py
+++ b/documents/scrape.py
@@ -197,7 +197,7 @@
links = soup.findAll('a') # soup.findAll('a', id=re.compile("^p-"))
linkurls = set([])
for link in links:
- if link.has_key("href"):
+ if link.has_attr("href"):
if link['href'].startswith("http"):
# lets not do external links for now
# linkurls.add(link['href'])
--- a/documents/scrapers/0e46f8bd1414b1fdd4f0543d54a97500.py
+++ b/documents/scrapers/0e46f8bd1414b1fdd4f0543d54a97500.py
@@ -7,7 +7,7 @@
#http://www.doughellmann.com/PyMOTW/abc/
class ScraperImplementation(genericScrapers.GenericOAICDisclogScraper):
def getTable(self,soup):
- return soup.find(id = "maincontentcontainer").table
+ return soup.find(class_ = "contentcontainer").table
def getColumnCount(self):
return 5
def getColumns(self,columns):
--- a/documents/scrapers/1803322b27286950cab0c543168b5f21.py
+++ b/documents/scrapers/1803322b27286950cab0c543168b5f21.py
@@ -16,7 +16,7 @@
links = []
description = ""
for atag in entry.find_all('a'):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
link = scrape.fullurl(self.getURL(), atag['href'])
(url, mime_type, htcontent) = scrape.fetchURL(scrape.docsdb, link, "foidocuments", self.getAgencyID(), False)
if htcontent != None:
@@ -25,7 +25,7 @@
row = soup.find(id="content_div_148050")
description = ''.join(row.stripped_strings)
for atag in row.find_all("a"):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
links.append(scrape.fullurl(link, atag['href']))
if links != []:
--- a/documents/scrapers/227cb6eb7d2c9f8a6e846df7447d6caa.py
+++ b/documents/scrapers/227cb6eb7d2c9f8a6e846df7447d6caa.py
@@ -11,7 +11,7 @@
links = []
description = ""
for atag in entry.find_all('a'):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
link = scrape.fullurl(self.getURL(),atag['href'])
(url,mime_type,htcontent) = scrape.fetchURL(scrape.docsdb, link, "foidocuments", self.getAgencyID(), False)
if htcontent != None:
@@ -26,7 +26,7 @@
for text in row.stripped_strings:
description = description + text + "\n"
for atag in row.find_all("a"):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
links.append(scrape.fullurl(link,atag['href']))
if links != []:
--- a/documents/scrapers/53d2884f8afd026096a27bd5051ec50e.py
+++ b/documents/scrapers/53d2884f8afd026096a27bd5051ec50e.py
@@ -16,7 +16,7 @@
link = None
links = []
for atag in entry.find_all('a'):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
link = scrape.fullurl(self.getURL(),atag['href'])
(url,mime_type,htcontent) = scrape.fetchURL(scrape.docsdb, link, "foidocuments", self.getAgencyID(), False)
if htcontent != None:
@@ -24,7 +24,7 @@
# http://www.crummy.com/software/BeautifulSoup/documentation.html
soup = BeautifulSoup(htcontent)
for atag in soup.find(class_ = "article-content").find_all('a'):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
links.append(scrape.fullurl(link,atag['href']))
if links != []:
--- a/documents/scrapers/5716ce0aacfe98f7d638b7a66b7f1040.py
+++ b/documents/scrapers/5716ce0aacfe98f7d638b7a66b7f1040.py
@@ -6,6 +6,11 @@
#http://www.doughellmann.com/PyMOTW/abc/
class ScraperImplementation(genericScrapers.GenericOAICDisclogScraper):
+ def getDocHash(self, id,date, url):
+ ''' url changes on ever request so ignore for hash '''
+ return scrape.mkhash(
+ self.remove_control_chars(
+ ''.join(id.stripped_strings)))
def getColumnCount(self):
return 4
def getColumns(self,columns):
--- a/documents/scrapers/69d59284ef0ccd2677394d82d3292abc.py
+++ b/documents/scrapers/69d59284ef0ccd2677394d82d3292abc.py
@@ -6,8 +6,6 @@
#http://www.doughellmann.com/PyMOTW/abc/
class ScraperImplementation(genericScrapers.GenericOAICDisclogScraper):
- def getTable(self,soup):
- return soup.find(id = "centercontent").table
def getColumnCount(self):
return 5
def getColumns(self,columns):
--- a/documents/scrapers/8e874a2fde8aa0ccdc6d14573d766540.py
+++ b/documents/scrapers/8e874a2fde8aa0ccdc6d14573d766540.py
@@ -11,7 +11,7 @@
links = []
description = ""
for atag in entry.find_all('a'):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
link = scrape.fullurl(self.getURL(),atag['href'])
(url,mime_type,htcontent) = scrape.fetchURL(scrape.docsdb, link, "foidocuments", self.getAgencyID(), False)
if htcontent != None:
@@ -22,7 +22,7 @@
description = description + text.encode('ascii', 'ignore')
for atag in soup.find(id="SortingTable").find_all("a"):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
links.append(scrape.fullurl(link,atag['href']))
if links != []:
@@ -43,7 +43,7 @@
links = []
description = ""
for atag in entry.find_all('a'):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
link = scrape.fullurl(self.getURL(),atag['href'])
(url,mime_type,htcontent) = scrape.fetchURL(scrape.docsdb, link, "foidocuments", self.getAgencyID(), False)
if htcontent != None:
@@ -53,7 +53,7 @@
for text in soup.find(id="content-item").stripped_strings:
description = description + text + " \n"
for atag in soup.find(id="content-item").find_all("a"):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
links.append(scrape.fullurl(link,atag['href']))
if links != []:
doc.update({'links': links})
--- a/documents/scrapers/be9996f0ac58f71f23d074e82d44ead3.py
+++ b/documents/scrapers/be9996f0ac58f71f23d074e82d44ead3.py
@@ -17,7 +17,7 @@
dldivs = soup.find('div',class_="download")
if dldivs != None:
for atag in dldivs.find_all("a"):
- if atag.has_key('href'):
+ if atag.has_attr('href'):
links.append(scrape.fullurl(url,atag['href']))
nodldivs = soup.find('div',class_="incompleteNotification")
if nodldivs != None and nodldivs.stripped_strings != None:
--- a/documents/scrapers/d1296c366287f7a9faedf235c7e6df01.py
+++ b/documents/scrapers/d1296c366287f7a9faedf235c7e6df01.py
@@ -6,8 +6,6 @@
#http://www.doughellmann.com/PyMOTW/abc/
class ScraperImplementation(genericScrapers.GenericOAICDisclogScraper):
- def getTable(self,soup):
- return soup.find(id="main").table
def getColumnCount(self):
return 7
def getColumns(self,columns):
--- a/documents/scrapers/f5ce2d1651739704634eb8ca4b2b46d3.py
+++ b/documents/scrapers/f5ce2d1651739704634eb8ca4b2b46d3.py
@@ -7,12 +7,12 @@
#http://www.doughellmann.com/PyMOTW/abc/
class ScraperImplementation(genericScrapers.GenericOAICDisclogScraper):
def getTable(self,soup):
- return soup.find(id = "ctl00_PlaceHolderMain_PublishingPageContent__ControlWrapper_RichHtmlField").table
+ return soup.find(id = "block-system-main").table
def getColumnCount(self):
- return 7
+ return 2
def getColumns(self,columns):
- (id, date, title, description,link,deldate, notes) = columns
- return (id, date, title, description, notes)
+ (date, title) = columns
+ return (date, date, title, title, None)
if __name__ == '__main__':
print 'Subclass:', issubclass(ScraperImplementation, genericScrapers.GenericOAICDisclogScraper)
--- a/documents/sitemap.xml.php
+++ b/documents/sitemap.xml.php
@@ -1,30 +1,48 @@
<?php
include ('../include/common.inc.php');
-$last_updated = date('Y-m-d', @filemtime('cbrfeed.zip'));
header("Content-Type: text/xml");
echo "<?xml version='1.0' encoding='UTF-8'?>";
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
echo " <url><loc>" . local_url() . "index.php</loc><priority>1.0</priority></url>\n";
foreach (scandir("./") as $file) {
- if (strpos($file, ".php") !== false && $file != "index.php" && $file != "sitemap.xml.php")
+ if (strpos($file, ".php") !== false && ($file != "index.php" && $file != "sitemap.xml.php"&& $file != "viewDocument.php")) {
echo " <url><loc>" . local_url() . "$file</loc><priority>0.6</priority></url>\n";
+ }
}
$agenciesdb = $server->get_db('disclosr-agencies');
+$foidocsdb = $server->get_db('disclosr-foidocuments');
try {
$rows = $agenciesdb->get_view("app", "byCanonicalName")->rows;
foreach ($rows as $row) {
echo '<url><loc>' . local_url() . 'agency.php?id=' . $row->value->_id . "</loc><priority>0.3</priority></url>\n";
}
+ unset($rows);
+ $rows = null;
} catch (SetteeRestClientException $e) {
setteErrorHandler($e);
}
-$foidocsdb = $server->get_db('disclosr-foidocuments');
+
+foreach (range(0, 8) as $number) {
try {
- $rows = $foidocsdb->get_view("app", "all")->rows;
+ $rows = $foidocsdb->get_view("app", "all", Array($number,$number+1))->rows;
foreach ($rows as $row) {
echo '<url><loc>' . local_url() . 'view.php?id=' . $row->value->_id . "</loc><priority>0.3</priority></url>\n";
}
+ unset($rows);
+ $rows = null;
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+}
+}
+
+try {
+ $rows = $foidocsdb->get_view("app", "all", Array('9','fffffffff'))->rows;
+ foreach ($rows as $row) {
+ echo '<url><loc>' . local_url() . 'view.php?id=' . $row->value->_id . "</loc><priority>0.3</priority></url>\n";
+ }
+ unset($rows);
+ $rows = null;
} catch (SetteeRestClientException $e) {
setteErrorHandler($e);
}
--- a/documents/template.inc.php
+++ b/documents/template.inc.php
@@ -58,11 +58,11 @@
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
- <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+ <!--<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
- </a>
+ </a> -->
<a class="brand" href="#">Australian Disclosure Logs</a>
<div class="nav-collapse collapse">
@@ -77,8 +77,9 @@
</p>
<ul class="nav">
<li><a href="agency.php">By Agency</a></li>
- <li><a href="date.php">By Date</a></li>
+<!-- <li><a href="date.php">By Date</a></li> -->
<li><a href="disclogsList.php">List of Disclosure Logs</a></li>
+ <li><a href="charts.php">Charts</a></li>
<li><a href="about.php">About</a></li>
</ul>
--- /dev/null
+++ b/employees-fail.php
@@ -1,1 +1,134 @@
+<?php
+include_once('include/common.inc.php');
+include_header('Charts');
+$db = $server->get_db('disclosr-agencies');
+?>
+<div class="foundation-header">
+ <h1><a href="about.php">Charts</a></h1>
+ <h4 class="subheader">Lorem ipsum.</h4>
+</div>
+<div id="scores" style="width:900px;height:500px;"></div>
+<script id="source">
+ window.onload = function() {
+ $(document).ready(function() {
+ var d1 = [];
+ var scorelabels = [];
+ <?php
+ try {
+ $rows = $db->get_view("app", "scoreHas?group=true", null, true)->rows;
+
+ $dataValues = Array();
+ foreach ($rows as $row) {
+ $dataValues[$row->value] = $row->key;
+ }
+ $i = 0;
+ ksort($dataValues);
+ foreach ($dataValues as $value => $key) {
+
+ echo " d1.push([$i, $value]);" . PHP_EOL;
+ echo " scorelabels.push('$key');" . PHP_EOL;
+ $i++;
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+ ?>
+ function scoretrackformatter(obj) {
+ if (scorelabels[Math.floor(obj.x)]) {
+ return (scorelabels[Math.floor(obj.x)])+"="+obj.y;
+
+ } else {
+ return "";
+ }
+ }
+ function scoretickformatter(val, axis) {
+ if (scorelabels[Math.floor(val)]) {
+ return '<p style="margin-top:8em;-webkit-transform:rotate(-90deg);">'+(scorelabels[Math.floor(val)])+"</b>";
+
+ } else {
+ return "";
+ }
+ }
+ Flotr.draw(document.getElementById("scores"), [ {data: d1}], {
+ HtmlText: true,
+ bars : {
+ show : true
+ },
+ mouse : {
+ track : true,
+ relative : true,
+ trackFormatter: scoretrackformatter
+ },yaxis: {
+ autoscaling: true
+ },
+ xaxis: {
+ autoscaling: true,
+ minorTickFreq: 0.6,
+ noTicks : scorelabels.length,
+ tickFormatter: scoretickformatter
+ }
+ });
+
+
+
+
+
+
+
+
+<div id="employees" style="width:1000px;height:900px;"></div>
+var emplabels = [];
+function emptrackformatter(obj) {
+
+ return (obj.series.label)+" = "+obj.y+" in "+emplabels[Math.floor(obj.x)];
+
+ }
+ function emptickformatter(val, axis) {
+ if (emplabels[Math.floor(val)]) {
+ return '<p style="margin-top:8em;-webkit-transform:rotate(-90deg);">'+(emplabels[Math.floor(val)])+"</b>";
+
+ } else {
+ return "";
+ }
+ }
+function onDataReceived(series) {
+ emplabels = series.labels;
+ Flotr.draw(document.getElementById("employees"), series.data, {
+ mouse : {
+ track : true,
+ relative : true,
+ trackFormatter: emptrackformatter
+ },yaxis: {
+ max: 10000,
+ scaling: 'logarithmic'
+ },
+ xaxis: {
+ minorTickFreq: 1,
+ noTicks: emplabels.length,
+ showMinorLabels: true,
+ tickFormatter: emptickformatter
+ },
+ legend: {
+ show: false
+ }
+ });
+ }
+
+ $.ajax({
+ url: "admin/exportEmployees.csv.php?format=json",
+ method: 'GET',
+ dataType: 'json',
+ success: onDataReceived
+ });
+
+
+ });
+ };
+
+</script>
+
+<?php
+include_footer();
+?>
+
--- /dev/null
+++ b/exportAgencies.csv.php
@@ -1,1 +1,88 @@
+<?php
+// use https://github.com/okfn/publicbodies/blob/master/data/nz.csv format
+include_once("include/common.inc.php");
+setlocale(LC_CTYPE, 'C');
+
+$headers = Array("title","abbr","key","category","parent","parent_key","description","url","jurisdiction","jurisdiction_code","source","source_url","address","contact","email","tags","created_at","updated_at");
+
+$db = $server->get_db('disclosr-agencies');
+
+
+$foiEmail = Array();
+try {
+ $rows = $db->get_view("app", "foiEmails", null, true)->rows;
+ //print_r($rows);
+ foreach ($rows as $row) {
+ $foiEmail[$row->key] = $row->value;
+ }
+} catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ die();
+}
+
+$fp = fopen('php://output', 'w');
+if ($fp && $db) {
+ header('Content-Type: text/csv; charset=utf-8');
+ header('Content-Disposition: attachment; filename="export.' . date("c") . '.csv"');
+ header('Pragma: no-cache');
+ header('Expires: 0');
+ fputcsv($fp, $headers);
+ try {
+ $agencies = $db->get_view("app", "byCanonicalName", null, true)->rows;
+ //print_r($rows);
+ foreach ($agencies as $agency) {
+ // print_r($agency);
+
+ if (isset($agency->value->foiEmail) && $agency->value->foiEmail != "null" && !isset($agency->value->status)) {
+ $row = Array();
+ $row["title"] = trim($agency->value->name);
+ $row["abbr"] = (isset($agency->value->shortName) ? $agency->value->shortName : "");
+ $row["key"] = (isset($agency->value->shortName) ? "au/".strtolower($agency->value->shortName) : "");
+ $row["category"] ="";
+ $row["parent"] ="";
+ $row["parentkey"] ="";
+ $row["description"] = (isset($agency->value->description) ? $agency->value->description : "");
+ $row["url"] = (isset($agency->value->website) ? $agency->value->website : "");
+ $row["jurisdiction"] = "Australia";
+ $row["jurisdiction_code"] = "au";
+
+ $row["source"] ="";
+ $row["source_url"] ="";
+ $row["address"] ="";
+ $row["contact"] ="";
+
+ $row["email"] = (isset($agency->value->foiEmail) ? $agency->value->foiEmail : "");
+ $row["tags"] ="";
+ $row["created_at"] ="";
+ $row["updated_at"] ="";
+
+
+ $otherBodies = Array();
+ if (isset($agency->value->foiBodies)) {
+ $otherBodies = array_merge($otherBodies, $agency->value->foiBodies);
+ }
+ if (isset($agency->value->positions)) {
+ $positions = Array();
+ foreach ($agency->value->positions as $position) {
+ $positions[] = "Office of the ".$position;
+ }
+ $otherBodies = array_merge($otherBodies, $positions);
+ }
+ sort($otherBodies);
+ if (count($otherBodies) > 0) {
+ $row["description"] .= "<br/> This department also responds to requests for information held by " . implode(", ", $otherBodies);
+ }
+
+
+ fputcsv($fp, array_values($row));
+ }
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+
+ die;
+}
+?>
+
--- a/getAgency.php
+++ b/getAgency.php
@@ -2,11 +2,12 @@
include_once('include/common.inc.php');
-function displayValue($key, $value, $mode) {
+function displayValue($key, $value, $mode)
+{
global $db, $schemas;
- $ignoreKeys = Array("metadata" ,"metaTags", "statistics","rtkURLs","rtkDescriptions");
+ $ignoreKeys = Array("metadata", "metaTags", "statistics", "rtkURLs", "rtkDescriptions");
if ($mode == "view") {
- if (strpos($key, "_") === 0 || in_array($key,$ignoreKeys))
+ if (strpos($key, "_") === 0 || in_array($key, $ignoreKeys))
return;
echo "<tr>";
@@ -22,7 +23,8 @@
echo "<li ";
if (isset($schemas['agency']["properties"][$key]['x-property'])) {
echo ' property="' . $schemas['agency']["properties"][$key]['x-property'] . '" ';
- } if (isset($schemas['agency']["properties"][$key]['x-itemprop'])) {
+ }
+ if (isset($schemas['agency']["properties"][$key]['x-itemprop'])) {
echo ' itemprop="' . $schemas['agency']["properties"][$key]['x-itemprop'] . '" ';
}
echo " >";
@@ -62,7 +64,7 @@
</div>";
} else {
if (strpos($key, "_") === 0) {
- echo"<input type='hidden' id='$key' name='$key' value='$value'/>";
+ echo "<input type='hidden' id='$key' name='$key' value='$value'/>";
} else if ($key == "parentOrg") {
echo "<label for='$key'>$key</label><select id='$key' name='$key'><option value=''> Select... </option>";
$rows = $db->get_view("app", "byDeptStateName")->rows;
@@ -70,7 +72,7 @@
foreach ($rows as $row) {
echo "<option value='{$row->value}'" . (($row->value == $value) ? "SELECTED" : "") . " >" . str_replace("Department of ", "", $row->key) . "</option>";
}
- echo" </select>";
+ echo " </select>";
} else {
echo "<label>$key</label><input class='input-text' type='text' id='$key' name='$key' value='$value'/>";
if ((strpos($key, "URL") > 0 || $key == 'website') && $value != "") {
@@ -85,7 +87,8 @@
//
}
-function addDefaultFields($row) {
+function addDefaultFields($row)
+{
global $schemas;
$defaultFields = array_keys($schemas['agency']['properties']);
foreach ($defaultFields as $defaultField) {
@@ -119,103 +122,103 @@
// by name = startkey="Ham"&endkey="Ham\ufff0"
// edit?
- $obj = $db->get($_REQUEST['id']);
- include_header(isset($obj->name) ? $obj->name : "");
+$obj = $db->get($_REQUEST['id']);
+include_header(isset($obj->name) ? $obj->name : "");
//print_r($row);
- if (sizeof($_POST) > 0) {
+if (sizeof($_POST) > 0) {
//print_r($_POST);
- foreach ($_POST as $postkey => $postvalue) {
- if ($postvalue == "") {
+ foreach ($_POST as $postkey => $postvalue) {
+ if ($postvalue == "") {
+ unset($_POST[$postkey]);
+ }
+ if (is_array($postvalue)) {
+ if (count($postvalue) == 1 && $postvalue[0] == "") {
unset($_POST[$postkey]);
- }
- if (is_array($postvalue)) {
- if (count($postvalue) == 1 && $postvalue[0] == "") {
- unset($_POST[$postkey]);
- } else {
- foreach ($_POST[$postkey] as $key => &$value) {
- if ($value == "") {
- unset($_POST[$postkey][$key]);
- }
+ } else {
+ foreach ($_POST[$postkey] as $key => &$value) {
+ if ($value == "") {
+ unset($_POST[$postkey][$key]);
}
}
}
}
- if (isset($_POST['_id']) && $db->get_rev($_POST['_id']) == $_POST['_rev']) {
- echo "Edited version was latest version, continue saving";
- $newdoc = $_POST;
- $newdoc['metadata']['lastModified'] = time();
- $obj = $db->save($newdoc);
- } else {
- echo "ALERT doc revised by someone else while editing. Document not saved.";
- }
- }
-
- $mode = "view";
- $rowArray = object_to_array($obj);
- ksort($rowArray);
- if ($mode == "edit") {
- $row = addDefaultFields($rowArray);
+ }
+ if (isset($_POST['_id']) && $db->get_rev($_POST['_id']) == $_POST['_rev']) {
+ echo "Edited version was latest version, continue saving";
+ $newdoc = $_POST;
+ $newdoc['metadata']['lastModified'] = time();
+ $obj = $db->save($newdoc);
} else {
- $row = $rowArray;
- }
-
- if ($mode == "view") {
- echo ' <div class="container-fluid">
+ echo "ALERT doc revised by someone else while editing. Document not saved.";
+ }
+}
+
+$mode = "view";
+$rowArray = object_to_array($obj);
+ksort($rowArray);
+if ($mode == "edit") {
+ $row = addDefaultFields($rowArray);
+} else {
+ $row = $rowArray;
+}
+
+if ($mode == "view") {
+ echo ' <div class="container-fluid">
<div class="row-fluid">
<div class="span3">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">Statistics</li>';
-
- if (isset($row['statistics']['employees'])) {
- echo '<div><i class="icon-user" style="float:left"></i><p style="margin-left:16px;">';
- $keys = array_keys($row['statistics']['employees']);
- $lastkey = $keys[count($keys)-1];
- echo $row['statistics']['employees'][$lastkey]['value'].' employees <small>('.$lastkey.')</small>';
- echo '</div>';
- }
- if (isset($row['statistics']['budget'])) {
- echo '<div><i class="icon-shopping-cart" style="float:left"></i><p style="margin-left:16px;">';
- $keys = array_keys($row['statistics']['budget']);
- $lastkey = $keys[count($keys)-1];
- echo "$".number_format(floatval($row['statistics']['budget'][$lastkey]['value'])).' <small>('.$lastkey.' budget)</small>';
- echo '</div>';
- }
+
+ if (isset($row['statistics']['employees'])) {
+ echo '<div><i class="icon-user" style="float:left"></i><p style="margin-left:16px;">';
+ $keys = array_keys($row['statistics']['employees']);
+ $lastkey = $keys[count($keys) - 1];
+ echo $row['statistics']['employees'][$lastkey]['value'] . ' employees <small>(' . $lastkey . ')</small>';
+ echo '</div>';
+ }
+ if (isset($row['statistics']['budget'])) {
+ echo '<div><i class="icon-shopping-cart" style="float:left"></i><p style="margin-left:16px;">';
+ $keys = array_keys($row['statistics']['budget']);
+ $lastkey = $keys[count($keys) - 1];
+ echo "$" . number_format(floatval($row['statistics']['budget'][$lastkey]['value'])) . ' <small>(' . $lastkey . ' budget)</small>';
+ echo '</div>';
+ }
echo ' </ul>
</div><!--/.well -->
</div><!--/span-->
<div class="span9">';
- echo '<div itemscope itemtype="http://schema.org/GovernmentOrganization" typeof="schema:GovernmentOrganization" about="#' . $row['_id'] . '">';
- echo '<div class="hero-unit">
+ echo '<div itemscope itemtype="http://schema.org/GovernmentOrganization" typeof="schema:GovernmentOrganization org:Organization" about="#' . $row['_id'] . '">';
+ echo '<div class="hero-unit">
<h1 itemprop="name">' . $row['name'] . '</h1>';
- if (isset($row['description'])) {
- echo '<p>'.$row['description'].'</p>';
- }
- echo '</div><table width="100%">';
- echo "<tr><th>Field Name</th><th>Field Value</th></tr>";
- }
- if ($mode == "edit") {
- ?>
- <input id="addfield" type="button" value="Add Field"/>
- <script>
- window.onload = function() {
- $(document).ready(function() {
- // put all your jQuery goodness in here.
- // http://charlie.griefer.com/blog/2009/09/17/jquery-dynamically-adding-form-elements/
- $('#addfield').click(function() {
- var field_name=window.prompt("fieldname?","");
- if (field_name !="") {
- $('#submitbutton').before($('<span></span>')
- .append("<label>"+field_name+"</label>")
- .append("<input class='input-text' type='text' id='"+field_name+"' name='"+field_name+"'/>")
- );
- }
- });
- });
- };
- </script>
- <form id="editform" class="nice" method="post">
- <?php
+ if (isset($row['description'])) {
+ echo '<p>' . $row['description'] . '</p>';
+ }
+ echo '</div><table width="100%">';
+ echo "<tr><th>Field Name</th><th>Field Value</th></tr>";
+}
+if ($mode == "edit") {
+?>
+<input id="addfield" type="button" value="Add Field"/>
+<script>
+ window.onload = function () {
+ $(document).ready(function () {
+ // put all your jQuery goodness in here.
+ // http://charlie.griefer.com/blog/2009/09/17/jquery-dynamically-adding-form-elements/
+ $('#addfield').click(function () {
+ var field_name = window.prompt("fieldname?", "");
+ if (field_name != "") {
+ $('#submitbutton').before($('<span></span>')
+ .append("<label>" + field_name + "</label>")
+ .append("<input class='input-text' type='text' id='" + field_name + "' name='" + field_name + "'/>")
+ );
+ }
+ });
+ });
+ };
+</script>
+<form id="editform" class="nice" method="post">
+ <?php
}
foreach ($row as $key => $value) {
@@ -223,7 +226,7 @@
}
if ($mode == "view") {
echo "</table></div>";
- echo ' </div><!--/span-->
+ echo ' </div><!--/span-->
</div><!--/row-->
</div><!--/span-->
</div><!--/row-->';
@@ -231,16 +234,16 @@
if ($mode == "edit") {
echo '<input id="submitbutton" type="submit"/></form>';
}
-} else {
+ } else {
// show all list
- include_header('Agencies');
- echo ' <div class="container-fluid">
+ include_header('Agencies');
+ echo ' <div class="container-fluid">
<div class="row-fluid">
<div class="span3">
<div class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">Sidebar</li>';
- echo ' </ul>
+ echo ' </ul>
</div><!--/.well -->
</div><!--/span-->
<div class="span9">
@@ -251,28 +254,28 @@
</div>
<div class="row-fluid">
<div class="span4">';
- try {
- $rows = $db->get_view("app", "byCanonicalName")->rows;
- //print_r($rows);
- $rowCount = count($rows);
- foreach ($rows as $i => $row) {
- if ($i % ($rowCount/3) == 0 && $i != 0 && $i != $rowCount -2 ) echo '</div><div class="span4">';
- // print_r($row);
- echo '<span itemscope itemtype="http://schema.org/GovernmentOrganization" typeof="schema:GovernmentOrganization foaf:Organization" about="getAgency.php?id=' . $row->value->_id . '">
+ try {
+ $rows = $db->get_view("app", "byCanonicalName")->rows;
+ //print_r($rows);
+ $rowCount = count($rows);
+ foreach ($rows as $i => $row) {
+ if ($i % ($rowCount / 3) == 0 && $i != 0 && $i != $rowCount - 2) echo '</div><div class="span4">';
+ // print_r($row);
+ echo '<span itemscope itemtype="http://schema.org/GovernmentOrganization" typeof="schema:GovernmentOrganization foaf:Organization" about="getAgency.php?id=' . $row->value->_id . '">
<a href="getAgency.php?id=' . $row->value->_id . '" rel="schema:url foaf:page" property="schema:name foaf:name" itemprop="url"><span itemprop="name">' .
- (isset($row->value->name) ? $row->value->name : "ERROR NAME MISSING")
- . '</span></a></span><br><br>';
- }
-
- } catch (SetteeRestClientException $e) {
- setteErrorHandler($e);
- }
- echo ' </div><!--/span-->
+ (isset($row->value->name) ? $row->value->name : "ERROR NAME MISSING")
+ . '</span></a></span><br><br>';
+ }
+
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+ echo ' </div><!--/span-->
</div><!--/row-->
</div><!--/span-->
</div><!--/row-->';
-}
-
-include_footer();
-?>
-
+ }
+
+ include_footer();
+ ?>
+
--- a/graph.php
+++ b/graph.php
@@ -9,13 +9,13 @@
function add_node($id, $label, $parent="") {
global $format;
if ($format == "html") {
- // echo "nodes[\"$id\"] = graph.newNode({label: \"$label\"});" . PHP_EOL;
+ // echo "nodes[\"$id\"] = graph.newNode({label: \"$label\"});" . PHP_EOL;
}
if ($format == "dot" && $label != "") {
- echo "$id [label=\"$label\"];". PHP_EOL;
+ echo "\"$id\" [label=\"$label\", shape=plaintext];". PHP_EOL;
}
if ($format == "gexf") {
- echo "<node id='$id' label=\"".htmlentities($label,ENT_XML1)."\" ".($parent != ""? "pid='$parent'><viz:size value='1'/>":"><viz:size value='2'/>")
+ echo "<node id='$id' label=\"".htmlentities($label)."\" ".($parent != ""? "pid='$parent'><viz:size value='1'/>":"><viz:size value='2'/>")
."<viz:color b='".rand(0,255)."' g='".rand(0,255)."' r='".rand(0,255)."'/>"
."</node>". PHP_EOL;
}
@@ -27,7 +27,7 @@
// echo "graph.newEdge(nodes[\"$from\"], nodes['$to'], {color: '$color'});" . PHP_EOL;
}
if ($format == "dot") {
- echo "$from -> $to ".($color != ""? "[color=$color]":"").";". PHP_EOL;
+ echo "\"$from\" -> \"$to\" ".($color != ""? "[color=$color]":"").";". PHP_EOL;
}
if ($format == "gexf") {
echo "<edge id='$from$to' source='$from' target='$to' />". PHP_EOL;
@@ -55,7 +55,7 @@
$rows = $db->get_view("app", "byCanonicalName", null, true)->rows;
//print_r($rows);
foreach ($rows as $row) {
- add_node($row->id, $row->key);
+ add_node($row->id, $row->value->name);
}
} catch (SetteeRestClientException $e) {
setteErrorHandler($e);
--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -10,6 +10,7 @@
|| strstr($_SERVER['PHP_SELF'], "documents/")
|| $_SERVER['SERVER_NAME'] == "disclosurelo.gs"
|| $_SERVER['SERVER_NAME'] == "www.disclosurelo.gs"
+ || $_SERVER['SERVER_NAME'] == "direct.disclosurelo.gs"
)
$basePath = "../";
@@ -19,7 +20,7 @@
Requests::register_autoloader();
$ENV = "DEV";
-if (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] != 'localhost') {
+if (false && isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] != 'localhost') {
require $basePath."lib/amon-php/amon.php";
Amon::config(array('address'=> 'http://127.0.0.1:2464',
--- a/include/couchdb.inc.php
+++ b/include/couchdb.inc.php
@@ -14,8 +14,8 @@
} else
if (php_uname('n') == "ikurt-20") {
- $serverAddr = 'http://192.168.1.113:5984/';
- //$serverAddr = 'http://127.0.0.1:5984/';
+ //$serverAddr = 'http://192.168.1.113:5984/';
+ $serverAddr = 'http://127.0.0.1:5984/';
} else {
$serverAddr = 'http://127.0.0.1:5984/';
}
--- a/include/template.inc.php
+++ b/include/template.inc.php
@@ -28,6 +28,9 @@
.sidebar-nav {
padding: 9px 0;
}
+ .flotr-dummy-div {
+ margin-left: -999px;
+ }
</style>
<link href="<?php echo $basePath ?>css/bootstrap-responsive.min.css" rel="stylesheet">
<!--[if lt IE 9]>
@@ -41,7 +44,7 @@
<![endif]-->
</head>
- <body xmlns:schema="http://schema.org/" xmlns:foaf="http://xmlns.com/foaf/0.1/">
+ <body xmlns:schema="http://schema.org/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:org="http://www.w3.org/ns/org#" xmlns:skos="http://www.w3.org/2004/02/skos/core#">
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
@@ -54,6 +57,7 @@
<div class="nav-collapse collapse">
<ul class="nav">
<li><a href="getAgency.php">Agencies</a></li>
+ <li><a href="ranking.php">Open Gov Ranking</a></li>
<li><a href="headcount.php">Employee Headcount Graph</a></li>
<li><a href="budget.php">Budget Graph</a></li>
<li><a href="about.php">About/FAQ</a></li>
--- a/lib/FeedWriter/FeedTypes.php
+++ /dev/null
@@ -1,63 +1,1 @@
-<?php
-/*
- * Copyright (C) 2012 Michael Bemmerl <mail@mx-server.de>
- *
- * This file is part of the "Universal Feed Writer" project.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!class_exists('FeedWriter'))
- require dirname(__FILE__) . '/FeedWriter.php';
-
-/**
- * Wrapper for creating RSS1 feeds
- *
- * @package UniversalFeedWriter
- */
-class RSS1FeedWriter extends FeedWriter
-{
- function __construct()
- {
- parent::__construct(RSS1);
- }
-}
-
-/**
- * Wrapper for creating RSS2 feeds
- *
- * @package UniversalFeedWriter
- */
-class RSS2FeedWriter extends FeedWriter
-{
- function __construct()
- {
- parent::__construct(RSS2);
- }
-}
-
-/**
- * Wrapper for creating ATOM feeds
- *
- * @package UniversalFeedWriter
- */
-class ATOMFeedWriter extends FeedWriter
-{
- function __construct()
- {
- parent::__construct(ATOM);
- }
-}
-
--- a/lib/FeedWriter/README
+++ b/lib/FeedWriter/README
@@ -1,7 +1,7 @@
This package can be used to generate feeds in either RSS 1.0, RSS 2.0 or ATOM
formats.
-There are three main classes that abstracts the feed information and another to
+There are three main classes that abstract the feed information and another to
encapsulate the feed items information.
Applications can create feed writer object, several feed item objects, set
@@ -16,5 +16,27 @@
Requirements
============
-PHP >= 5.0
+PHP >= 5.3
+
+If you don't have 5.3 available on your system, there's a version supporting
+PHP >= 5.0 in the "legacy-php-5.0" branch.
+
+
+Documentation
+=============
+
+The documentation can be found in the "gh-pages" branch or on GitHub Pages:
+http://mibe.github.io/FeedWriter/
+
+
+Authors
+=======
+(in chronological order)
+
+Anis uddin Ahmad
+Michael Bemmerl
+Phil Freo
+Paul Ferrett
+Brennen Bearnes
+Michael Robinson
--- a/lib/FeedWriter/examples/example_atom.php
+++ b/lib/FeedWriter/examples/example_atom.php
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
<?php
/*
@@ -57,4 +58,77 @@
$TestFeed->generateFeed();
?>
+=======
+<?php
+
+// You should use an autoloader instead of including the files directly.
+// This is done here only to make the examples work out of the box.
+include('../Item.php');
+include('../Feed.php');
+include('../ATOM.php');
+
+date_default_timezone_set('UTC');
+
+use \FeedWriter\ATOM;
+
+/*
+ * Copyright (C) 2008 Anis uddin Ahmad <anisniit@gmail.com>
+ *
+ * This file is part of the "Universal Feed Writer" project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// IMPORTANT : No need to add id for feed or channel. It will be automatically created from link.
+
+//Creating an instance of ATOM class.
+$TestFeed = new ATOM;
+
+//Setting the channel elements
+//Use wrapper functions for common elements
+$TestFeed->setTitle('Testing the RSS writer class');
+$TestFeed->setLink('http://www.ajaxray.com/rss2/channel/about');
+$TestFeed->setDate(new DateTime());
+
+//For other channel elements, use setChannelElement() function
+$TestFeed->setChannelElement('author', array('name'=>'Anis uddin Ahmad'));
+
+//You can add additional link elements, e.g. to a PubSubHubbub server with custom relations.
+$TestFeed->setSelfLink('http://example.com/myfeed');
+$TestFeed->setAtomLink('http://pubsubhubbub.appspot.com', 'hub');
+
+//Adding a feed. Generally this portion will be in a loop and add all feeds.
+
+//Create an empty Item
+$newItem = $TestFeed->createNewItem();
+
+//Add elements to the feed item
+//Use wrapper functions to add common feed elements
+$newItem->setTitle('The first feed');
+$newItem->setLink('http://www.yahoo.com');
+$newItem->setDate(time());
+$newItem->setAuthor('Anis uddin Ahmad', 'anis@example.invalid');
+$newItem->setEnclosure('http://upload.wikimedia.org/wikipedia/commons/4/49/En-us-hello-1.ogg', 11779, 'audio/ogg');
+
+//Internally changed to "summary" tag for ATOM feed
+$newItem->setDescription('This is a test of adding CDATA encoded description by the php <b>Universal Feed Writer</b> class');
+$newItem->setContent('<h1>hi.</h1> <p>This is the content for the entry.</p>');
+
+//Now add the feed item
+$TestFeed->addItem($newItem);
+
+//OK. Everything is done. Now generate the feed.
+$TestFeed->printFeed();
+>>>>>>> origin/master
--- a/lib/FeedWriter/examples/example_minimum.php
+++ b/lib/FeedWriter/examples/example_minimum.php
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
<?php
/*
@@ -56,4 +57,70 @@
$TestFeed->generateFeed();
?>
+=======
+<?php
+
+// You should use an autoloader instead of including the files directly.
+// This is done here only to make the examples work out of the box.
+include('../Item.php');
+include('../Feed.php');
+include('../RSS2.php');
+
+date_default_timezone_set('UTC');
+
+use \FeedWriter\RSS2;
+
+/*
+ * Copyright (C) 2008 Anis uddin Ahmad <anisniit@gmail.com>
+ *
+ * This file is part of the "Universal Feed Writer" project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+//Creating an instance of RSS2 class.
+$TestFeed = new RSS2;
+
+//Setting the channel elements
+//Use wrapper functions for common channel elements
+$TestFeed->setTitle('Testing & Checking the RSS writer class');
+$TestFeed->setLink('http://www.ajaxray.com/projects/rss');
+$TestFeed->setDescription('This is a test of creating a RSS 2.0 feed Universal Feed Writer');
+
+//Image title and link must match with the 'title' and 'link' channel elements for valid RSS 2.0
+$TestFeed->setImage('Testing & Checking the RSS writer class','http://www.ajaxray.com/projects/rss','http://www.rightbrainsolution.com/_resources/img/logo.png');
+
+//Let's add some feed items: Create two empty Item instances
+$itemOne = $TestFeed->createNewItem();
+$itemTwo = $TestFeed->createNewItem();
+
+//Add item details
+$itemOne->setTitle('The title of the first entry.');
+$itemOne->setLink('http://www.google.de');
+$itemOne->setDate(time());
+$itemOne->setDescription('And here\'s the description of the entry.');
+
+$itemTwo->setTitle('Lorem ipsum');
+$itemTwo->setLink('http://www.example.com');
+$itemTwo->setDate(1234567890);
+$itemTwo->setDescription('Lorem ipsum dolor sit amet, consectetur, adipisci velit');
+
+//Now add the feed item
+$TestFeed->addItem($itemOne);
+$TestFeed->addItem($itemTwo);
+
+//OK. Everything is done. Now generate the feed.
+$TestFeed->printFeed();
+>>>>>>> origin/master
--- a/lib/FeedWriter/examples/example_rss1.php
+++ b/lib/FeedWriter/examples/example_rss1.php
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
<?php
/*
@@ -64,4 +65,76 @@
$TestFeed->generateFeed();
?>
+=======
+<?php
+
+// You should use an autoloader instead of including the files directly.
+// This is done here only to make the examples work out of the box.
+include('../Item.php');
+include('../Feed.php');
+include('../RSS1.php');
+
+date_default_timezone_set('UTC');
+
+use \FeedWriter\RSS1;
+
+/*
+ * Copyright (C) 2008 Anis uddin Ahmad <anisniit@gmail.com>
+ *
+ * This file is part of the "Universal Feed Writer" project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+//Creating an instance of RSS1 class.
+$TestFeed = new RSS1;
+
+//Setting the channel elements
+//Use wrapper functions for common elements
+//For other optional channel elements, use setChannelElement() function
+$TestFeed->setTitle('Testing the RSS writer class');
+$TestFeed->setLink('http://www.ajaxray.com/rss2/channel/about');
+$TestFeed->setDescription('This is test of creating a RSS 1.0 feed by Universal Feed Writer');
+
+//It's important for RSS 1.0
+$TestFeed->setChannelAbout('http://www.ajaxray.com/rss2/channel/about');
+
+//Adding a feed. Generally this portion will be in a loop and add all feeds.
+
+//Create an empty FeedItem
+$newItem = $TestFeed->createNewItem();
+
+//Add elements to the feed item
+//Use wrapper functions to add common feed elements
+$newItem->setTitle('The first feed');
+$newItem->setLink('http://www.yahoo.com');
+//The parameter is a timestamp for setDate() function
+$newItem->setDate(time());
+$newItem->setDescription('This is test of adding CDATA encoded description by the php <b>Universal Feed Writer</b> class');
+//Use core addElement() function for other supported optional elements
+$newItem->addElement('dc:subject', 'Nothing but test');
+
+//Now add the feed item
+$TestFeed->addItem($newItem);
+
+//Adding multiple elements from array
+//Elements which have an attribute cannot be added by this way
+$newItem = $TestFeed->createNewItem();
+$newItem->addElementArray(array('title'=>'The 2nd feed', 'link'=>'http://www.google.com', 'description'=>'This is a test of the FeedWriter class'));
+$TestFeed->addItem($newItem);
+
+//OK. Everything is done. Now generate the feed.
+$TestFeed->printFeed();
+>>>>>>> origin/master
--- a/lib/FeedWriter/examples/example_rss2.php
+++ b/lib/FeedWriter/examples/example_rss2.php
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
<?php
/*
@@ -70,4 +71,125 @@
$TestFeed->generateFeed();
?>
+=======
+<?php
+
+// You should use an autoloader instead of including the files directly.
+// This is done here only to make the examples work out of the box.
+include('../Item.php');
+include('../Feed.php');
+include('../RSS2.php');
+
+date_default_timezone_set('UTC');
+
+use \FeedWriter\RSS2;
+
+/**
+ * Copyright (C) 2008 Anis uddin Ahmad <anisniit@gmail.com>
+ * Copyright (C) 2013 Michael Bemmerl <mail@mx-server.de>
+ *
+ * This file is part of the "Universal Feed Writer" project.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Creating an instance of RSS2 class.
+$TestFeed = new RSS2;
+
+// Setting some basic channel elements. These three elements are mandatory.
+$TestFeed->setTitle('Testing & Checking the Feed Writer project');
+$TestFeed->setLink('https://github.com/mibe/FeedWriter');
+$TestFeed->setDescription('This is just an example how to use the Feed Writer project in your code.');
+
+// Image title and link must match with the 'title' and 'link' channel elements for RSS 2.0,
+// which were set above.
+$TestFeed->setImage('Testing & Checking the Feed Writer project', 'https://github.com/mibe/FeedWriter', 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/d9/Rss-feed.svg/256px-Rss-feed.svg.png');
+
+// Use core setChannelElement() function for other optional channel elements.
+// See http://www.rssboard.org/rss-specification#optionalChannelElements
+// for other optional channel elements. Here the language code for American English and
+$TestFeed->setChannelElement('language', 'en-US');
+
+// The date when this feed was lastly updated. The publication date is also set.
+$TestFeed->setDate(date(DATE_RSS, time()));
+$TestFeed->setChannelElement('pubDate', date(\DATE_RSS, strtotime('2013-04-06')));
+
+// You can add additional link elements, e.g. to a PubSubHubbub server with custom relations.
+// It's recommended to provide a backlink to the feed URL.
+$TestFeed->setSelfLink('http://example.com/myfeed');
+$TestFeed->setAtomLink('http://pubsubhubbub.appspot.com', 'hub');
+
+// You can add more XML namespaces for more custom channel elements which are not defined
+// in the RSS 2 specification. Here the 'creativeCommons' element is used. There are much more
+// available. Have a look at this list: http://feedvalidator.org/docs/howto/declare_namespaces.html
+$TestFeed->addNamespace('creativeCommons', 'http://backend.userland.com/creativeCommonsRssModule');
+$TestFeed->setChannelElement('creativeCommons:license', 'http://www.creativecommons.org/licenses/by/1.0');
+
+// If you want you can also add a line to publicly announce that you used
+// this fine piece of software to generate the feed. ;-)
+$TestFeed->addGenerator();
+
+// Here we are done setting up the feed. What's next is adding some feed items.
+
+// Create a new feed item.
+$newItem = $TestFeed->createNewItem();
+
+// Add basic elements to the feed item
+// These are again mandatory for a valid feed.
+$newItem->setTitle('Hello World!');
+$newItem->setLink('http://www.example.com');
+$newItem->setDescription('This is a test of adding a description by the <b>Feed Writer</b> classes. It\'s automatically CDATA encoded.');
+
+// The following method calls add some optional elements to the feed item.
+
+// Let's set the publication date of this item. You could also use a UNIX timestamp or
+// an instance of PHP's DateTime class.
+$newItem->setDate('2013-04-07 00:50:30');
+
+// You can also attach a media object to a feed item. You just need the URL, the byte length
+// and the MIME type of the media. Here's a quirk: The RSS2 spec says "The url must be an http url.".
+// Other schemes like ftp, https, etc. produce an error in feed validators.
+$newItem->setEnclosure('http://upload.wikimedia.org/wikipedia/commons/4/49/En-us-hello-1.ogg', 11779, 'audio/ogg');
+
+// If you want you can set the name (and email address) of the author of this feed item.
+$newItem->setAuthor('Anis uddin Ahmad', 'admin@ajaxray.com');
+
+// You can set a globally unique identifier. This can be a URL or any other string.
+// If you set permaLink to true, the identifier must be an URL. The default of the
+// permaLink parameter is false.
+$newItem->setId('http://example.com/URL/to/article', true);
+
+// Use the addElement() method for other optional elements.
+// This here will add the 'source' element. The second parameter is the value of the element
+// and the third is an array containing the element attributes.
+$newItem->addElement('source', 'Mike\'s page', array('url' => 'http://www.example.com'));
+
+// Now add the feed item to the main feed.
+$TestFeed->addItem($newItem);
+
+// Another method to add feeds items is by using an array which contains key-value pairs
+// of every item element. Elements which have attributes cannot be added by this way.
+$newItem = $TestFeed->createNewItem();
+$newItem->addElementArray(array('title'=> 'The 2nd item', 'link' => 'http://www.google.com', 'description' => 'Just another test.'));
+$TestFeed->addItem($newItem);
+
+// OK. Everything is done. Now generate the feed.
+// If you want to send the feed directly to the browser, use the printFeed() method.
+$myFeed = $TestFeed->generateFeed();
+
+// Do anything you want with the feed in $myFeed. Why not send it to the browser? ;-)
+// You could also save it to a file if you don't want to invoke your script every time.
+echo $myFeed;
+>>>>>>> origin/master
--- /dev/null
+++ b/ranking.php
@@ -1,1 +1,217 @@
-
+<?php
+include_once('include/common.inc.php');
+include_header('Open Gov Rankings');
+$db = $server->get_db('disclosr-agencies');
+?>
+<div class="foundation-header">
+ <h1><a href="about.php">Open Government Rankings</a></h1>
+ <h4 class="subheader"></h4>
+</div>
+<table>
+ <?php
+ $agenciesdb = $server->get_db('disclosr-agencies');
+ //$docsdb = $server->get_db('disclosr-documents');
+ $scoredagencies = Array();
+ $scores = Array();
+ $columnKeys = Array();
+
+ try {
+ $rows = $agenciesdb->get_view("app", "all", null, true)->rows;
+
+
+ if ($rows) {
+ foreach ($rows as $row) {
+ $columns = Array();
+ foreach ($row->value as $key => $value) {
+ if ((strstr($key, "has") || strstr($key, "URL")) && $key != "rtkURLs") {
+ //echo "$key<br>";
+ $columns[$key] = $value;
+ }
+ }
+ //print_r(array_keys($columns));
+ $columnKeys = array_unique(array_merge($columnKeys, array_keys($columns)));
+ //print_r($columnKeys);
+ $score = count($columns);
+ if (isset($scores[$score])){
+$scores[$score]++;
+} else {
+$scores[$score] =1;
+}
+ $scoredagencies[] = Array("id"=> $row->key, "website"=> (isset($row->value->website)?$row->value->website:""), "name" => $row->value->name, "columns" => $columns, "score" => $score);
+ }
+ }
+
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+ function cmp($a, $b)
+ {
+ if ($a['score'] == $b['score']) {
+ return strcmp($a['name'], $b['name']);
+ }
+ return ($a['score'] > $b['score']) ? -1 : 1;
+ }
+
+ usort($scoredagencies, "cmp");
+ echo "<tr>";
+ echo "<th>Agency Name</th>";
+ echo "<th>Score</th>";
+ foreach ($columnKeys as $columnID) {
+ echo "<th>" . (isset($schemas['agency']["properties"][$columnID]['x-title']) ? $schemas['agency']["properties"][$columnID]['x-title'] : "<i>$columnID</i>") . "</th>";
+ }
+ echo "</tr>";
+ foreach ($scoredagencies as $scoredagency) {
+ echo "<tr>";
+ echo "<td><b><a href='getAgency.php?id=" . $scoredagency['id'] . "'>". $scoredagency['name'] . "</a></b></td>";
+ echo "<td><b>" . $scoredagency['score'] . "</b></td>";
+ foreach ($columnKeys as $key) {
+ echo "<td style='text-align: center;'>";
+ if (isset($scoredagency['columns'][$key])) {
+ $value = $scoredagency['columns'][$key];
+ if (is_array($value)) {
+ if (count($value) == 1) {
+ $href = $value[0];
+ } else {
+ $href = $value[0];
+ }
+
+ } else {
+ $href = $value;
+ }
+ if (isset($href[0]) && $href[0] == "@") {
+ $href = str_replace("@","https://twitter.com/",$href);
+ }
+ //$href= urlencode($href);
+
+ echo "<font color='lightgreen'>";
+
+ if (strstr($href, "http")) {
+ echo "<a title='Yes' href='$href' style='color:lightgreen;'>✓</a>";
+ } else {
+ echo "✓";
+ }
+
+ echo "</font>";
+ } else {
+ echo "<font color='orange'><abbr title='No'>✘</abbr></font>";
+ }
+ echo "</td>";
+ }
+ echo "</tr>\n";
+ }
+ ?>
+</table><br>
+<div id="criteria" style="width:500px;height:900px;"></div>
+<div id="scores" style="width:900px;height:500px;"></div>
+<script id="source">
+ window.onload = function () {
+ $(document).ready(function () {
+ var d1 = [];
+ var scorelabels = [];
+ <?php
+ try {
+ $rows = $db->get_view("app", "scoreHas?group=true", null, true)->rows;
+
+
+ $dataValues = Array();
+ foreach ($rows as $row) {
+ $dataValues[$row->value] = $row->key;
+ }
+ $i = 0;
+ ksort($dataValues);
+ foreach ($dataValues as $value => $key) {
+
+ echo " d1.push([$value, $i]);" . PHP_EOL;
+ echo " scorelabels.push('$key');" . PHP_EOL;
+ $i++;
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+ ?>
+ function scoretrackformatter(obj) {
+ if (scorelabels[Math.floor(obj.y)]) {
+ return (scorelabels[Math.floor(obj.y)]) + "=" + obj.x;
+
+ } else {
+ return "";
+ }
+ }
+
+ function scoretickformatter(val, axis) {
+ if (scorelabels[Math.floor(val)]) {
+ return (scorelabels[Math.floor(val)]) ;
+
+ } else {
+ return "";
+ }
+ }
+
+ Flotr.draw(document.getElementById("criteria"), [
+ {data: d1}
+ ], {
+ title: 'Total count of agencies with criteria',
+ HtmlText: true,
+ bars: {
+ show: true,
+ horizontal: true
+ },
+ mouse: {
+ track: true,
+ relative: true,
+ trackFormatter: scoretrackformatter
+ }, yaxis: {
+ autoscaling: true,
+ minorTickFreq: 0.6,
+ noTicks: scorelabels.length,
+ tickFormatter: scoretickformatter
+ },
+ xaxis: {
+ autoscaling: true
+
+ }
+ });
+
+ var d2 = [];
+ <?php
+ try {
+
+ ksort($scores);
+ foreach ($scores as $key => $value) {
+
+ echo " d2.push([$key,$value]);" . PHP_EOL;
+ $i++;
+ }
+ } catch (SetteeRestClientException $e) {
+ setteErrorHandler($e);
+ }
+ ?>
+
+
+ Flotr.draw(document.getElementById("scores"), [
+ {data: d2}
+ ], {
+ title: 'Frequency distribution of Scores',
+ HtmlText: true,
+ bars: {
+ show: true
+ },
+ mouse: {
+ track: true,
+ relative: true
+ }, yaxis: {
+ autoscaling: true
+ },
+ xaxis: {
+ autoscaling: true
+
+ }
+ });
+
+ });
+ };
+</script>
+<?php
+include_footer();
+?>
+
--- a/robots.txt
+++ b/robots.txt
@@ -3,4 +3,5 @@
User-agent: *
Disallow: /admin/
+Disallow: /viewDocument.php
Sitemap: http://orgs.disclosurelo.gs/sitemap.xml.php
--- a/schemas/agency.json.php
+++ b/schemas/agency.json.php
@@ -4,7 +4,7 @@
"description" => "Representation of government agency and online transparency measures",
"type" => "object",
"properties" => Array(
- "name" => Array("type" => "string", "required" => true, "x-itemprop" => "name", "x-property" => "schema:name foaf:name", "x-title" => "Name", "description" => "Name, most recent and broadest"),
+ "name" => Array("type" => "string", "required" => true, "x-itemprop" => "name", "x-property" => "schema:name foaf:name skos:prefLabel ", "x-title" => "Name", "description" => "Name, most recent and broadest"),
"shortName" => Array("type" => "string", "required" => false, "x-title" => "Short Name", "description" => "Name shortened, usually to an acronym"),
"description" => Array("type" => "string", "required" => false, "x-title" => "Description", "description" => "Description of roles and responsiblities of organisation"),
"foiEmail" => Array("type" => "string", "required" => false, "x-title" => "FOI Contact Email", "x-itemprop" => "email", "description" => "FOI contact email if not foi@"),
@@ -14,15 +14,15 @@
"items" => Array("type" => "string")),
"positions" => Array("type" => "array", "required" => true, "x-title" => "Political Positions", "description" => "Ministers and Parliamentary Secretaries",
"items" => Array("type" => "string")),
- "foiBodies" => Array("type" => "array", "required" => true, "x-title" => "FOI Bodies","x-property"=>"schema:members foaf:knows", "description" => "Organisational units within this agency that are subject to FOI Act but are not autonomous",
+ "foiBodies" => Array("type" => "array", "required" => true, "x-title" => "FOI Bodies","x-property"=>"schema:members foaf:knows org:hasSubOrganization", "description" => "Organisational units within this agency that are subject to FOI Act but are not autonomous",
"items" => Array("type" => "string")),
"legislation" => Array("type" => "array", "required" => true, "x-title" => "Legislation", "description" => "Legislation administered by or created for the establishment of this organisation",
"items" => Array("type" => "string")),
- "orgType" => Array("type" => "string", "required" => true, "x-title" => "Organisation Type", "description" => "Org type based on legal formation via FMA/CAC legislation etc."),
- "parentOrg" => Array("type" => "string", "required" => true, "x-title" => "Parent Organisation", "description" => "Parent organisation, usually a department of state"),
+ "orgType" => Array("type" => "string", "required" => true, "x-title" => "Organisation Type", "x-property" => "org:classification", "description" => "Org type based on legal formation via FMA/CAC legislation etc."),
+ "parentOrg" => Array("type" => "string", "required" => true, "x-title" => "Parent Organisation", "x-property" => "org:subOrganizationOf", "description" => "Parent organisation, usually a department of state"),
"website" => Array("type" => "string", "required" => true, "x-title" => "Website", "x-itemprop" => "url", "x-property" => "schema:url foaf:homepage", "description" => "Website URL"),
- "abn" => Array("type" => "string", "required" => true, "x-title" => "Australian Business Number", "description" => "ABN from business register"),
- "established" => Array("type" => "string", "required" => true, "x-title" => "Date established", "description" => "Date established"),
+ "abn" => Array("type" => "string", "required" => true, "x-title" => "Australian Business Number", "x-property" => "org:identifier", "description" => "ABN from business register"),
+ "established" => Array("type" => "string", "required" => true, "x-title" => "Date established", "x-property" => "schema:foundingDate", "description" => "Date established"),
"employees" => Array("type" => "string", "required" => true, "x-title" => "2010-2011 employees", "description" => "2010-2011 employees"),
"contractListURL" => Array("type" => "string", "required" => true, "x-title" => "Contract Listing", "description" => "Departmental and agency contracts, <a href='http://www.aph.gov.au/senate/pubs/standing_orders/d05.htm'>mandated by the Senate</a>" ),
"budgetURL" => Array("type" => "string", "required" => true,"x-title" => "Budget", "description" => "Portfolio Budget Statements and Portfolio Additional Estimates Statements"),
--- a/sitemap.xml.php
+++ b/sitemap.xml.php
@@ -7,7 +7,7 @@
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . "\n";
echo " <url><loc>" . local_url() . "index.php</loc><priority>1.0</priority></url>\n";
foreach (scandir("./") as $file) {
- if (strpos($file, ".php") !== false && $file != "index.php" && $file != "sitemap.xml.php")
+ if (strpos($file, ".php") !== false && $file != "index.php" && $file != "sitemap.xml.php"&& $file != "viewDocument.php")
echo " <url><loc>" . local_url() . "$file</loc><priority>0.3</priority></url>\n";
}