Plugin CommentCenter has proved to be very useful and therefore becomes part of the FP standard distribution.
70
fp-plugins/commentcenter/imgs/copyright
Normal file
@ -0,0 +1,70 @@
|
||||
This icons are taken from the Tango Icon Theme (packed by Debian).
|
||||
The package is tango-icon-theme and here's its copyright file.
|
||||
|
||||
============
|
||||
|
||||
This package was debianized by Daniel Holbach <daniel.holbach@ubuntu.com> on
|
||||
Mon, 10 Oct 2005 20:50:20 +0200.
|
||||
|
||||
It was downloaded from http://tango.freedesktop.org/releases/
|
||||
|
||||
Upstream Authors: 2005-2009
|
||||
|
||||
Ulisse Perusin <uli.peru@gmail.com>
|
||||
Steven Garrity <sgarrity@silverorange.com>
|
||||
Lapo Calamandrei <calamandrei@gmail.com>
|
||||
Ryan Collier <rcollier@novell.com>
|
||||
Rodney Dawes <dobey@novell.com>
|
||||
Andreas Nilsson <nisses.mail@home.se>
|
||||
Tuomas Kuosmanen <tigert@tigert.com>
|
||||
Garrett LeSage <garrett@novell.com>
|
||||
Jakub Steiner <jimmac@novell.com>
|
||||
|
||||
Copyright:
|
||||
|
||||
In the preparation of the 0.8.90 release Novell took care of tracking
|
||||
down all the contributors to get them to relicense their artwork
|
||||
into Public Domain.
|
||||
|
||||
The COPYING file of the tarball states the following:
|
||||
| The icons in this repository are herefore released into the Public Domain.
|
||||
|
||||
Additionally the copyright status of the files was tracked in the CVS and the
|
||||
rdf properties of the SVGs adjusted for all files that were put into Public
|
||||
Domain (see rdf:about and rdf:resource). Both fields contain a link to the
|
||||
Creative Commons Public Domain Dediciation[0] as reproduced below:
|
||||
| Public Domain Dedication
|
||||
|
|
||||
| Copyright-Only Dedication (based on United States law) or Public Domain
|
||||
| Certification
|
||||
|
|
||||
| The person or persons who have associated work with this document (the
|
||||
| "Dedicator" or "Certifier") hereby either (a) certifies that, to the best
|
||||
| of his knowledge, the work of authorship identified is in the public
|
||||
| domain of the country from which the work is published, or (b)
|
||||
| hereby dedicates whatever copyright the dedicators holds in the work
|
||||
| of authorship identified below (the "Work") to the public domain. A
|
||||
| certifier, moreover, dedicates any copyright interest he may have in
|
||||
| the associated work, and for these purposes, is described as a
|
||||
| "dedicator" below.
|
||||
|
|
||||
| A certifier has taken reasonable steps to verify the copyright
|
||||
| status of this work. Certifier recognizes that his good faith efforts
|
||||
| may not shield him from liability if in fact the work certified is not
|
||||
| in the public domain.
|
||||
|
|
||||
| Dedicator makes this dedication for the benefit of the public at
|
||||
| large and to the detriment of the Dedicator's heirs and successors.
|
||||
| Dedicator intends this dedication to be an overt act of relinquishment
|
||||
| in perpetuity of all present and future rights under copyright law,
|
||||
| whether vested or contingent, in the Work. Dedicator understands that
|
||||
| such relinquishment of all rights includes the relinquishment of all
|
||||
| rights to enforce (by lawsuit or otherwise) those copyrights in the
|
||||
| Work.
|
||||
|
|
||||
| Dedicator recognizes that, once placed in the public domain, the Work
|
||||
| may be freely reproduced, distributed, transmitted, used, modified,
|
||||
| built upon, or otherwise exploited by anyone for any purpose, commercial
|
||||
| or non-commercial, and in any way, including by methods that have not
|
||||
| yet been invented or conceived.
|
||||
[0] http://creativecommons.org/licenses/publicdomain/
|
BIN
fp-plugins/commentcenter/imgs/delete.png
Normal file
After Width: | Height: | Size: 848 B |
BIN
fp-plugins/commentcenter/imgs/down.png
Normal file
After Width: | Height: | Size: 539 B |
508
fp-plugins/commentcenter/imgs/edit-cut.svg
Normal file
@ -0,0 +1,508 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48"
|
||||
height="48"
|
||||
id="svg23883"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.46"
|
||||
version="1.0"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
|
||||
sodipodi:docname="edit-cut.svg"
|
||||
inkscape:export-filename="/home/garrett/edit-cut.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs23885">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 24 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="48 : 24 : 1"
|
||||
inkscape:persp3d-origin="24 : 16 : 1"
|
||||
id="perspective70" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2269">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2271" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2273" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2259">
|
||||
<stop
|
||||
style="stop-color:#9a0c00;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2261" />
|
||||
<stop
|
||||
style="stop-color:#9a0c00;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2263" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2251">
|
||||
<stop
|
||||
style="stop-color:#df2a2a;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2253" />
|
||||
<stop
|
||||
style="stop-color:#df2a2a;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2255" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2229">
|
||||
<stop
|
||||
style="stop-color:#e2e2e2;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2231" />
|
||||
<stop
|
||||
style="stop-color:#d8d8d8;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2233" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,1.010300,1.007969e-18,-0.159801)"
|
||||
r="7.2848282"
|
||||
cy="23.333008"
|
||||
cx="165.06104"
|
||||
id="radialGradient16850">
|
||||
<stop
|
||||
id="stop16852"
|
||||
style="stop-color:#EF3535"
|
||||
offset="0" />
|
||||
<stop
|
||||
id="stop16854"
|
||||
style="stop-color:#a40000;stop-opacity:0"
|
||||
offset="1" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="XMLID_897_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="292.97168"
|
||||
y1="4.7592773"
|
||||
x2="296.93979"
|
||||
y2="10.711433">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#EEEEEC"
|
||||
id="stop45093" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
id="stop45095" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="path3230_2_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="1668.7646"
|
||||
y1="185.30176"
|
||||
x2="1679.5989"
|
||||
y2="175.78883"
|
||||
gradientTransform="matrix(1.213800,0.000000,0.282500,-1.671200,46.72625,447.9442)">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#FFFFFF"
|
||||
id="stop4977" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#CFCFCF"
|
||||
id="stop4979" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="path3311_1_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="1420.5474"
|
||||
y1="-50.919434"
|
||||
x2="1420.6542"
|
||||
y2="-79.574341"
|
||||
gradientTransform="matrix(2.051000,0.000000,0.167200,-0.989000,-799.2049,221.0724)">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#C4A000"
|
||||
id="stop4970" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#957A00"
|
||||
id="stop4972" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="XMLID_52_"
|
||||
cx="165.06104"
|
||||
cy="23.333008"
|
||||
r="7.2848282"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,1.010300,1.007969e-18,-0.159801)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#EF3535"
|
||||
id="stop812" />
|
||||
<stop
|
||||
id="stop2239"
|
||||
style="stop-color:#c91a1a;stop-opacity:1;"
|
||||
offset="0" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#ff4c4c;stop-opacity:1;"
|
||||
id="stop814" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="XMLID_45_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="68.175293"
|
||||
y1="21.424805"
|
||||
x2="74.587158"
|
||||
y2="27.836672">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#BABDB6"
|
||||
id="stop695" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#EEEEEC"
|
||||
id="stop697" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#path3230_2_"
|
||||
id="linearGradient142876"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.213781,0,0.282495,-1.671173,-1712.251,391.532)"
|
||||
x1="1668.7646"
|
||||
y1="185.30176"
|
||||
x2="1679.5989"
|
||||
y2="175.78883" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#path3230_2_"
|
||||
id="linearGradient142884"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.213781,0.000000,0.282495,-1.671173,-1385.251,394.5320)"
|
||||
x1="1668.7646"
|
||||
y1="185.30176"
|
||||
x2="1679.5989"
|
||||
y2="175.78883" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#path3311_1_"
|
||||
id="linearGradient142892"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.050967,0.000000,0.167197,-0.988984,-2231.169,167.6639)"
|
||||
x1="1420.5474"
|
||||
y1="-50.919434"
|
||||
x2="1420.6542"
|
||||
y2="-79.574341" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_45_"
|
||||
id="linearGradient16739"
|
||||
x1="22.225399"
|
||||
y1="23.843431"
|
||||
x2="24.190449"
|
||||
y2="22.860907"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_52_"
|
||||
id="linearGradient16769"
|
||||
x1="294.59497"
|
||||
y1="12.187603"
|
||||
x2="297.18515"
|
||||
y2="13.3396"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_52_"
|
||||
id="linearGradient16894"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(3.624438,0.000000,0.000000,3.624438,-1053.179,-16.84720)"
|
||||
x1="296.76199"
|
||||
y1="12.012225"
|
||||
x2="297.79822"
|
||||
y2="10.946587" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_52_"
|
||||
id="linearGradient16946"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(3.637893,0.000000,0.000000,3.470375,-1056.116,-16.00724)"
|
||||
x1="296.48611"
|
||||
y1="15.506916"
|
||||
x2="296.52905"
|
||||
y2="9.8769522" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_897_"
|
||||
id="linearGradient16968"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-4.127761,0.000000,0.000000,4.136601,1244.465,-11.90495)"
|
||||
x1="292.97168"
|
||||
y1="4.7592773"
|
||||
x2="296.93979"
|
||||
y2="10.711433" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_897_"
|
||||
id="linearGradient16974"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(4.053427,0.000000,0.000000,4.136601,-1175.535,-11.90495)"
|
||||
x1="292.97168"
|
||||
y1="4.7592773"
|
||||
x2="296.93979"
|
||||
y2="10.711433" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#radialGradient16850"
|
||||
id="linearGradient17028"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.161878,0.000000,0.000000,0.992497,-5.112111,6.400522e-2)"
|
||||
x1="39.619942"
|
||||
y1="44.540932"
|
||||
x2="-3.532515"
|
||||
y2="-11.889042" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_52_"
|
||||
id="linearGradient17034"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.161878,0.000000,0.000000,0.992497,-2.666967,6.400522e-2)"
|
||||
x1="13.82536"
|
||||
y1="40.068752"
|
||||
x2="7.6700611"
|
||||
y2="2.3262277" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_52_"
|
||||
id="linearGradient17037"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="7.184845"
|
||||
y1="31.056622"
|
||||
x2="25.152235"
|
||||
y2="50.774887"
|
||||
gradientTransform="matrix(1.161878,0.000000,0.000000,0.992497,-2.430779,0.265761)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2229"
|
||||
id="linearGradient2235"
|
||||
x1="20.288025"
|
||||
y1="6.4603648"
|
||||
x2="24.32597"
|
||||
y2="23.942537"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2229"
|
||||
id="linearGradient2237"
|
||||
x1="20.288025"
|
||||
y1="6.4603648"
|
||||
x2="24.32597"
|
||||
y2="23.942537"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#XMLID_52_"
|
||||
id="radialGradient2241"
|
||||
cx="34.376091"
|
||||
cy="37.50008"
|
||||
fx="34.376091"
|
||||
fy="37.50008"
|
||||
r="8.3887873"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,1.060381,0.000000,-2.299514)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2251"
|
||||
id="linearGradient2257"
|
||||
x1="298.47852"
|
||||
y1="13.599585"
|
||||
x2="298.86948"
|
||||
y2="13.802949"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2259"
|
||||
id="linearGradient2265"
|
||||
x1="298.47852"
|
||||
y1="13.599585"
|
||||
x2="298.86948"
|
||||
y2="13.802949"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2269"
|
||||
id="radialGradient2275"
|
||||
cx="25.1875"
|
||||
cy="41.625"
|
||||
fx="25.1875"
|
||||
fy="41.625"
|
||||
r="18.0625"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.325260,2.029626e-16,28.08607)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.13333333"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:cx="32.034218"
|
||||
inkscape:cy="23.0589"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
gridtolerance="0.5px"
|
||||
inkscape:window-width="1011"
|
||||
inkscape:window-height="818"
|
||||
inkscape:window-x="177"
|
||||
inkscape:window-y="30"
|
||||
stroke="#a40000"
|
||||
inkscape:showpageshadow="false">
|
||||
<inkscape:grid
|
||||
id="GridFromPre046Settings"
|
||||
type="xygrid"
|
||||
originx="0px"
|
||||
originy="0px"
|
||||
spacingx="1px"
|
||||
spacingy="1px"
|
||||
color="#0000ff"
|
||||
empcolor="#0000ff"
|
||||
opacity="0.2"
|
||||
empopacity="0.4"
|
||||
empspacing="4" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata23888">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Edit Cut</dc:title>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Garrett Le Sage</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>edit</rdf:li>
|
||||
<rdf:li>cut</rdf:li>
|
||||
<rdf:li>clipboard</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/publicdomain/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
style="fill:url(#linearGradient16968);stroke:#888a85;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 34.174311,1.6249997 C 34.386261,1.6935355 34.59157,1.7696619 34.798294,1.842502 C 35.449709,4.0395037 38.469777,6.2612218 37.321354,8.4491328 C 33.495509,14.82952 29.697021,21.294565 25.899759,27.72527 C 25.154013,27.872172 24.401732,27.952183 23.647995,27.96996 C 22.061603,28.01017 20.433063,27.775465 18.927431,27.23589 C 23.978303,18.684616 29.031301,10.114483 34.174311,1.6249997 z "
|
||||
id="path16717" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2237);fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 34.288823,4.25 C 34.057702,4.5574529 33.839208,5.120942 33.602793,5.40625 C 29.555938,12.158979 25.440784,18.900329 21.378976,25.625 C 21.318425,25.878117 20.565047,26.637291 21.366935,26.567963 C 22.478492,26.765843 23.638682,26.918567 24.746762,26.625 C 28.505752,20.407794 32.192639,14.142582 35.943048,7.9231779 C 36.285519,7.5359043 36.352163,6.9979201 35.992403,6.611197 C 35.462387,5.7945892 34.925464,4.9364821 34.382373,4.15625 L 34.311813,4.2269607 L 34.288823,4.25 z "
|
||||
id="path16719" />
|
||||
<polygon
|
||||
style="fill:url(#linearGradient16769);fill-opacity:1;stroke:#9a0c00;stroke-width:0.28144068;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="polygon45129"
|
||||
points="297.04443,12.300293 296.39941,13.384766 295.13281,14.71875 294.73242,13.672852 295.74658,11.960449 297.04443,12.300293 "
|
||||
transform="matrix(3.637893,0.000000,0.000000,3.470375,-1056.116,-16.00724)" />
|
||||
<path
|
||||
style="fill:url(#linearGradient16946);fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 20.40625,26.96875 C 19.183905,27.455468 19.192232,29.003929 18.481272,29.932762 C 18.138949,30.648557 17.537483,31.278989 17.28125,32.03125 C 17.271571,32.546641 17.729203,33.391474 18.3125,32.9375 C 19.697476,31.791172 20.876866,30.398821 21.756725,28.810629 C 21.989088,28.320596 22.552476,27.916466 22.625,27.40625 C 22.086431,26.835441 21.112182,26.873225 20.40625,26.96875 z "
|
||||
id="polygon16896" />
|
||||
<path
|
||||
style="fill:url(#linearGradient16974);stroke:#888a85;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 12.960099,1.6249997 C 12.751966,1.6935355 12.550355,1.7696619 12.347353,1.842502 C 11.707669,4.0395037 8.7419877,6.2612218 9.8697297,8.4491328 C 13.626677,14.82952 17.35676,21.294565 21.085639,27.72527 C 21.817956,27.872172 22.55669,27.952183 23.296853,27.96996 C 24.854677,28.01017 26.453889,27.775465 27.932407,27.23589 C 22.972493,18.684616 18.010492,10.114483 12.960099,1.6249997 z "
|
||||
id="polygon45097" />
|
||||
<path
|
||||
style="fill:url(#linearGradient2235);fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 12.719667,4.25 C 12.336632,5.3766793 11.270006,6.2059645 11.004855,7.40625 C 14.713376,13.800362 18.475798,20.175378 22.181757,26.5625 C 23.380123,26.820799 24.610198,26.655657 25.795112,26.40625 C 25.606339,25.665807 25.056911,25.075319 24.765129,24.3767 C 20.870526,17.806174 16.941429,11.242872 13.087127,4.65625 C 13.072466,4.5046403 12.870425,4.1721152 12.719667,4.25 z "
|
||||
id="path16635" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1;color:#000000;fill:url(#linearGradient16739);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path16731"
|
||||
sodipodi:cx="23.207924"
|
||||
sodipodi:cy="23.843431"
|
||||
sodipodi:rx="0.98252523"
|
||||
sodipodi:ry="0.98252523"
|
||||
d="M 24.190449 23.843431 A 0.98252523 0.98252523 0 1 1 22.225399,23.843431 A 0.98252523 0.98252523 0 1 1 24.190449 23.843431 z"
|
||||
transform="matrix(0.979893,0.000000,0.000000,1.000000,0.311384,0.174043)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.26704544;color:#000000;fill:url(#radialGradient2275);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path2267"
|
||||
sodipodi:cx="25.1875"
|
||||
sodipodi:cy="41.625"
|
||||
sodipodi:rx="18.0625"
|
||||
sodipodi:ry="5.875"
|
||||
d="M 43.25 41.625 A 18.0625 5.875 0 1 1 7.125,41.625 A 18.0625 5.875 0 1 1 43.25 41.625 z"
|
||||
transform="matrix(1.256055,0.000000,0.000000,0.819149,-7.199394,9.090421)" />
|
||||
<path
|
||||
id="path45138"
|
||||
style="fill:url(#linearGradient17037);fill-opacity:1;stroke:#a40000;stroke-opacity:1"
|
||||
d="M 17.700393,30.286934 C 20.935404,32.013583 21.196229,36.899851 18.278338,41.201286 C 15.360479,45.50525 10.373849,47.596472 7.1373807,45.877418 C 3.9008825,44.150767 3.6415462,39.267032 6.5594356,34.965597 C 9.4758075,30.664166 14.463925,28.572944 17.700393,30.286934 z M 15.845268,33.029079 C 14.408745,32.26545 11.33781,33.569599 9.3789266,36.463107 C 7.4160164,39.356612 7.5560293,42.376624 8.991202,43.137951 C 10.426348,43.906181 13.499985,42.597432 15.458868,39.703925 C 17.42313,36.81042 17.281765,33.792709 15.845268,33.029079 z " />
|
||||
<path
|
||||
style="fill:url(#linearGradient17034);fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
d="M 14.3255,30.583289 C 12.400369,30.97051 10.691041,32.037306 9.2785926,33.064531 C 8.5268294,33.759433 8.0350294,34.514452 7.3629449,35.31874 C 5.6546178,37.670805 4.9387067,40.762168 6.2901069,43.388409 C 6.90956,44.841515 8.9327419,45.435852 10.658323,45.067542 C 12.110236,44.819078 13.339639,43.906473 14.470735,43.268641 C 15.391637,42.47786 16.024749,41.642131 16.803626,40.677364 C 18.612986,38.202962 19.595537,34.928687 18.101604,32.165081 C 17.377898,31.022952 15.866963,30.41829 14.3255,30.583289 z M 14.797513,31.54477 C 16.814017,31.795124 18.154487,33.577585 17.92006,35.266634 C 17.940833,37.553573 16.774038,39.710728 15.196909,41.500756 C 13.779705,42.902737 11.848294,44.229027 9.5327534,44.137076 C 8.1738996,44.134209 7.100179,43.224779 6.7169325,42.176618 C 6.1002938,39.644695 6.9116496,36.911389 8.6831288,34.83862 C 10.041367,33.315308 11.877976,31.95152 14.150642,31.596926 C 14.366331,31.581652 14.581522,31.554432 14.797513,31.54477 z "
|
||||
id="path16771" />
|
||||
<path
|
||||
d="M 30.331764,30.286934 C 27.096753,32.013583 26.835929,36.899851 29.75382,41.201286 C 32.671679,45.50525 37.658309,47.596472 40.894777,45.877418 C 44.131276,44.150767 44.390611,39.267032 41.472722,34.965597 C 38.55635,30.664166 33.568233,28.572944 30.331764,30.286934 z M 32.18689,33.029079 C 33.623412,32.26545 36.694348,33.569599 38.653231,36.463107 C 40.616141,39.356612 40.476128,42.376624 39.040956,43.137951 C 37.60581,43.906181 34.532173,42.597432 32.57329,39.703925 C 30.609028,36.81042 30.750393,33.792709 32.18689,33.029079 z "
|
||||
style="fill:url(#radialGradient2241);fill-opacity:1;stroke:#a40000;stroke-opacity:1"
|
||||
id="path11967" />
|
||||
<polygon
|
||||
style="fill:url(#linearGradient2257);fill-opacity:1;stroke:url(#linearGradient2265);stroke-width:0.27590489;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="polygon45101"
|
||||
points="296.95605,12.300293 297.6001,13.384766 298.86719,14.71875 299.26807,13.672852 298.25391,11.960449 296.95605,12.300293 "
|
||||
transform="matrix(3.624438,0.000000,0.000000,3.624438,-1053.179,-16.84720)" />
|
||||
<path
|
||||
style="fill:url(#linearGradient16894);fill-opacity:1;stroke:none;stroke-width:0.27590489;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 26.15625,27.9375 C 25.729502,28.136321 25.139436,28.138981 24.8125,28.4375 C 25.76252,29.838889 26.702412,31.352161 27.663379,32.650077 C 28.331933,33.404621 29.019194,34.150303 29.78125,34.8125 C 30.516527,33.421076 29.91641,31.751292 28.96875,30.625 C 28.366215,29.725307 28.138928,28.512038 27.125,28.03125 C 26.820951,27.912839 26.474385,27.853373 26.15625,27.9375 z "
|
||||
id="polygon16860" />
|
||||
<path
|
||||
style="fill:url(#linearGradient17028);fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
d="M 32.280087,30.449093 C 30.759703,30.678844 29.385141,31.534748 29.039639,32.837057 C 27.908495,35.232508 28.824763,37.950571 30.319418,40.063908 C 31.421345,41.40911 32.259488,42.993821 33.959001,43.837878 C 35.429654,44.761502 37.300143,45.728452 39.176641,45.138766 C 40.689956,44.705317 41.547313,43.4582 41.856813,42.166912 C 42.461243,39.856882 41.561117,37.490951 40.149846,35.530428 C 39.491173,34.616722 38.816861,33.647222 38.036528,32.835783 C 36.841969,31.932329 35.398614,31.184254 33.947688,30.603431 C 33.41359,30.493019 32.832464,30.37069 32.280087,30.449093 z M 32.715792,31.658699 C 34.473095,31.591923 35.950305,32.398157 37.092162,33.427664 C 38.124459,34.396792 39.113817,35.23287 39.754673,36.426541 C 40.831856,38.24711 41.142534,40.4065 40.594777,42.390073 C 40.066397,43.714585 38.368623,44.362109 36.803657,44.006518 C 34.821776,43.77769 33.586317,42.335503 32.277091,41.198158 C 30.771344,39.766768 29.83647,37.719532 29.76651,35.715783 C 29.780622,34.698114 29.740042,33.53736 30.464653,32.682212 C 30.876926,32.139062 31.84466,31.627886 32.715792,31.658699 z "
|
||||
id="path16795" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 22 KiB |
BIN
fp-plugins/commentcenter/imgs/edit.png
Normal file
After Width: | Height: | Size: 696 B |
200
fp-plugins/commentcenter/imgs/go-down.svg
Normal file
@ -0,0 +1,200 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="go-down.svg"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
|
||||
inkscape:version="0.46"
|
||||
sodipodi:version="0.32"
|
||||
id="svg11300"
|
||||
height="48px"
|
||||
width="48px"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 24 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="48 : 24 : 1"
|
||||
inkscape:persp3d-origin="24 : 16 : 1"
|
||||
id="perspective24" />
|
||||
<linearGradient
|
||||
id="linearGradient1442">
|
||||
<stop
|
||||
id="stop1444"
|
||||
offset="0"
|
||||
style="stop-color:#73d216" />
|
||||
<stop
|
||||
id="stop1446"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#4e9a06" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient8662"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop8664"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop8666"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient8650"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop8652"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop8654"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8662"
|
||||
id="radialGradient1444"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,1.614716e-15,16.87306)"
|
||||
cx="24.837126"
|
||||
cy="36.421127"
|
||||
fx="24.837126"
|
||||
fy="36.421127"
|
||||
r="15.644737" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1442"
|
||||
id="radialGradient1469"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.871885e-16,-0.843022,1.020168,2.265228e-16,0.606436,42.58614)"
|
||||
cx="35.292667"
|
||||
cy="20.494493"
|
||||
fx="35.292667"
|
||||
fy="20.494493"
|
||||
r="16.956199" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8650"
|
||||
id="radialGradient1471"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(3.749427e-16,-2.046729,-1.557610,-2.853404e-16,44.11559,66.93275)"
|
||||
cx="15.987216"
|
||||
cy="1.5350308"
|
||||
fx="15.987216"
|
||||
fy="1.5350308"
|
||||
r="17.171415" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="818"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:cy="23.239067"
|
||||
inkscape:cx="15.972815"
|
||||
inkscape:zoom="11.313708"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="0.25490196"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
fill="#4e9a06"
|
||||
stroke="#4e9a06" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
|
||||
<dc:title>Go Down</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>go</rdf:li>
|
||||
<rdf:li>lower</rdf:li>
|
||||
<rdf:li>down</rdf:li>
|
||||
<rdf:li>arrow</rdf:li>
|
||||
<rdf:li>pointer</rdf:li>
|
||||
<rdf:li>></rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/publicdomain/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1">
|
||||
<path
|
||||
transform="matrix(1.214466,0.000000,0.000000,0.595458,-6.163846,16.31275)"
|
||||
d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z"
|
||||
sodipodi:ry="8.3968935"
|
||||
sodipodi:rx="15.644737"
|
||||
sodipodi:cy="36.421127"
|
||||
sodipodi:cx="24.837126"
|
||||
id="path8660"
|
||||
style="opacity:0.20454545;color:#000000;fill:url(#radialGradient1444);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<g
|
||||
id="g1464"
|
||||
transform="matrix(-1.000000,0.000000,0.000000,-1.000000,47.02856,43.99921)">
|
||||
<path
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1469);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#3a7304;stroke-width:1.0000004;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 14.519136,38.500000 L 32.524165,38.496094 L 32.524165,25.504468 L 40.519531,25.496656 L 23.374809,5.4992135 L 6.5285585,25.497284 L 14.524440,25.501074 L 14.519136,38.500000 z "
|
||||
id="path8643"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<path
|
||||
style="opacity:0.50802141;color:#000000;fill:url(#radialGradient1471);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 39.429889,24.993467 L 32.023498,25.005186 L 32.026179,37.998023 L 16.647623,37.98887 C 17.417545,19.64788 27.370272,26.995797 32.029282,16.341991 L 39.429889,24.993467 z "
|
||||
id="path8645"
|
||||
sodipodi:nodetypes="cccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path8658"
|
||||
d="M 15.520704,37.496094 L 31.522109,37.500000 L 31.522109,24.507050 L 38.338920,24.491425 L 23.384644,7.0388396 L 8.6781173,24.495782 L 15.518018,24.501029 L 15.520704,37.496094 z "
|
||||
style="opacity:0.48128340;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000004;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.1 KiB |
196
fp-plugins/commentcenter/imgs/go-up.svg
Normal file
@ -0,0 +1,196 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="go-up.svg"
|
||||
sodipodi:docbase="/home/tigert/cvs/freedesktop.org/tango-icon-theme/scalable/actions"
|
||||
inkscape:version="0.46"
|
||||
sodipodi:version="0.32"
|
||||
id="svg11300"
|
||||
height="48px"
|
||||
width="48px"
|
||||
inkscape:export-filename="/home/jimmac/Desktop/wi-fi.png"
|
||||
inkscape:export-xdpi="90.000000"
|
||||
inkscape:export-ydpi="90.000000"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 24 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="48 : 24 : 1"
|
||||
inkscape:persp3d-origin="24 : 16 : 1"
|
||||
id="perspective23" />
|
||||
<linearGradient
|
||||
id="linearGradient2304">
|
||||
<stop
|
||||
id="stop2306"
|
||||
offset="0"
|
||||
style="stop-color:#73d216" />
|
||||
<stop
|
||||
id="stop2308"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#4e9a06" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient8662"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop8664"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop8666"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient8650"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop8652"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop8654"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8650"
|
||||
id="radialGradient1438"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-3.749427e-16,-2.046729,1.557610,-2.853404e-16,2.767009,66.93275)"
|
||||
cx="24.53788"
|
||||
cy="0.40010813"
|
||||
fx="24.53788"
|
||||
fy="0.40010813"
|
||||
r="17.171415" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2304"
|
||||
id="radialGradient1441"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.871885e-16,-0.843022,1.020168,2.265228e-16,0.606436,42.58614)"
|
||||
cx="11.319205"
|
||||
cy="22.454971"
|
||||
fx="11.319205"
|
||||
fy="22.454971"
|
||||
r="16.956199" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8662"
|
||||
id="radialGradient1444"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,1.614716e-15,16.87306)"
|
||||
cx="24.837126"
|
||||
cy="36.421127"
|
||||
fx="24.837126"
|
||||
fy="36.421127"
|
||||
r="15.644737" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="30"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="818"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:showpageshadow="false"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="false"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:cy="25.620377"
|
||||
inkscape:cx="9.6380363"
|
||||
inkscape:zoom="13.059378"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="0.25490196"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
fill="#73d216"
|
||||
stroke="#73d216" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://jimmac.musichall.cz</dc:source>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
|
||||
<dc:title>Go Up</dc:title>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>go</rdf:li>
|
||||
<rdf:li>higher</rdf:li>
|
||||
<rdf:li>up</rdf:li>
|
||||
<rdf:li>arrow</rdf:li>
|
||||
<rdf:li>pointer</rdf:li>
|
||||
<rdf:li>></rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/publicdomain/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1">
|
||||
<path
|
||||
transform="matrix(1.214466,0.000000,0.000000,0.595458,-6.163846,16.31275)"
|
||||
d="M 40.481863 36.421127 A 15.644737 8.3968935 0 1 1 9.1923885,36.421127 A 15.644737 8.3968935 0 1 1 40.481863 36.421127 z"
|
||||
sodipodi:ry="8.3968935"
|
||||
sodipodi:rx="15.644737"
|
||||
sodipodi:cy="36.421127"
|
||||
sodipodi:cx="24.837126"
|
||||
id="path8660"
|
||||
style="opacity:0.29946521;color:#000000;fill:url(#radialGradient1444);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
id="path8643"
|
||||
d="M 14.491792,38.500000 L 32.469477,38.500000 L 32.469477,25.547437 L 40.500000,25.547437 L 23.374809,5.4992135 L 6.5285585,25.489471 L 14.497096,25.555762 L 14.491792,38.500000 z "
|
||||
style="opacity:1.0000000;color:#000000;fill:url(#radialGradient1441);fill-opacity:1.0000000;fill-rule:evenodd;stroke:#3a7304;stroke-width:1.0000004;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccscc"
|
||||
id="path8645"
|
||||
d="M 7.5855237,25.03253 L 14.995821,25.03253 L 15.062422,31.594339 C 20.718034,20.593878 31.055517,22.749928 31.656768,15.966674 C 31.656768,15.966674 23.366938,6.4219692 23.366938,6.4219692 L 7.5855237,25.03253 z "
|
||||
style="opacity:0.50802141;color:#000000;fill:url(#radialGradient1438);fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible" />
|
||||
<path
|
||||
style="opacity:0.48128340;color:#000000;fill:none;fill-opacity:1.0000000;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000004;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:10.000000;stroke-dasharray:none;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 15.602735,37.500000 L 31.502578,37.500000 L 31.502578,24.507050 L 38.311576,24.507050 L 23.361206,7.0700896 L 8.6546798,24.550470 L 15.475049,24.528373 L 15.602735,37.500000 z "
|
||||
id="path8658"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.0 KiB |
436
fp-plugins/commentcenter/imgs/list-add.svg
Normal file
@ -0,0 +1,436 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg6431"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.46"
|
||||
sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/actions"
|
||||
sodipodi:docname="list-add.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs6433">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 24 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="48 : 24 : 1"
|
||||
inkscape:persp3d-origin="24 : 16 : 1"
|
||||
id="perspective70" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2091">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2093" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2095" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient7916">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop7918" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.34020618;"
|
||||
offset="1.0000000"
|
||||
id="stop7920" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient8662">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop8664" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop8666" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8662"
|
||||
id="radialGradient1503"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.536723,-1.018989e-13,16.87306)"
|
||||
cx="24.837126"
|
||||
cy="36.421127"
|
||||
fx="24.837126"
|
||||
fy="36.421127"
|
||||
r="15.644737" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2847">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2849" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2851" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2847"
|
||||
id="linearGradient1488"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.000000,0.000000,0.000000,-1.000000,-1.242480,40.08170)"
|
||||
x1="37.128052"
|
||||
y1="29.729605"
|
||||
x2="37.065414"
|
||||
y2="26.194071" />
|
||||
<linearGradient
|
||||
id="linearGradient2831">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2833" />
|
||||
<stop
|
||||
id="stop2855"
|
||||
offset="0.33333334"
|
||||
style="stop-color:#5b86be;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#83a8d8;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2835" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2831"
|
||||
id="linearGradient1486"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-48.30498,-6.043298)"
|
||||
x1="13.478554"
|
||||
y1="10.612206"
|
||||
x2="15.419417"
|
||||
y2="19.115122" />
|
||||
<linearGradient
|
||||
id="linearGradient2380">
|
||||
<stop
|
||||
style="stop-color:#b9cfe7;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop2382" />
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2384" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2682">
|
||||
<stop
|
||||
style="stop-color:#3977c3;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2684" />
|
||||
<stop
|
||||
style="stop-color:#89aedc;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2686" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2682"
|
||||
id="linearGradient2688"
|
||||
x1="36.713837"
|
||||
y1="31.455952"
|
||||
x2="37.124462"
|
||||
y2="24.842253"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-48.77039,-5.765705)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2690">
|
||||
<stop
|
||||
style="stop-color:#c4d7eb;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2692" />
|
||||
<stop
|
||||
style="stop-color:#c4d7eb;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2694" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2690"
|
||||
id="linearGradient2696"
|
||||
x1="32.647972"
|
||||
y1="30.748846"
|
||||
x2="37.124462"
|
||||
y2="24.842253"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-48.77039,-5.765705)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2871">
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2873" />
|
||||
<stop
|
||||
style="stop-color:#3465a4;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop2875" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2402">
|
||||
<stop
|
||||
style="stop-color:#729fcf;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2404" />
|
||||
<stop
|
||||
style="stop-color:#528ac5;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2406" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2797"
|
||||
id="linearGradient1493"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.9649176"
|
||||
y1="26.048164"
|
||||
x2="52.854097"
|
||||
y2="26.048164" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2797">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2799" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2801" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2797"
|
||||
id="linearGradient1491"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="5.9649176"
|
||||
y1="26.048164"
|
||||
x2="52.854097"
|
||||
y2="26.048164" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient7179">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop7181" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop7183" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2316">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2318" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.65979379;"
|
||||
offset="1"
|
||||
id="stop2320" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient1322">
|
||||
<stop
|
||||
id="stop1324"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#729fcf" />
|
||||
<stop
|
||||
id="stop1326"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#5187d6;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient1322"
|
||||
id="linearGradient4975"
|
||||
x1="34.892849"
|
||||
y1="36.422989"
|
||||
x2="45.918697"
|
||||
y2="48.547989"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-18.01785,-13.57119)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient7179"
|
||||
id="linearGradient7185"
|
||||
x1="13.435029"
|
||||
y1="13.604306"
|
||||
x2="22.374878"
|
||||
y2="23.554308"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient7179"
|
||||
id="linearGradient7189"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="13.435029"
|
||||
y1="13.604306"
|
||||
x2="22.374878"
|
||||
y2="23.554308"
|
||||
gradientTransform="matrix(-1.000000,0.000000,0.000000,-1.000000,47.93934,50.02474)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2380"
|
||||
id="linearGradient7180"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="62.513836"
|
||||
y1="36.061237"
|
||||
x2="15.984863"
|
||||
y2="20.60858" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2871"
|
||||
id="linearGradient7182"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="46.834816"
|
||||
y1="45.264122"
|
||||
x2="45.380436"
|
||||
y2="50.939667" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2402"
|
||||
id="linearGradient7184"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="18.935766"
|
||||
y1="23.667896"
|
||||
x2="53.588622"
|
||||
y2="26.649362" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2871"
|
||||
id="linearGradient7186"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="46.834816"
|
||||
y1="45.264122"
|
||||
x2="45.380436"
|
||||
y2="50.939667" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient7916"
|
||||
id="linearGradient7922"
|
||||
x1="16.874998"
|
||||
y1="22.851799"
|
||||
x2="27.900846"
|
||||
y2="34.976799"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2091"
|
||||
id="radialGradient2097"
|
||||
cx="23.070683"
|
||||
cy="35.127438"
|
||||
fx="23.070683"
|
||||
fy="35.127438"
|
||||
r="10.319340"
|
||||
gradientTransform="matrix(0.914812,1.265023e-2,-8.21502e-3,0.213562,2.253914,27.18889)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.15686275"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="-123.56934"
|
||||
inkscape:cy="0.031886897"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="818"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="30"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata6436">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Add</dc:title>
|
||||
<dc:date>2006-01-04</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source>http://tango-project.org</dc:source>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>add</rdf:li>
|
||||
<rdf:li>plus</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/publicdomain/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.10824742;fill:url(#radialGradient2097);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path1361"
|
||||
sodipodi:cx="22.958872"
|
||||
sodipodi:cy="34.94062"
|
||||
sodipodi:rx="10.31934"
|
||||
sodipodi:ry="2.320194"
|
||||
d="M 33.278212 34.94062 A 10.31934 2.320194 0 1 1 12.639532,34.94062 A 10.31934 2.320194 0 1 1 33.278212 34.94062 z"
|
||||
transform="matrix(1.550487,0,0,1.978714,-12.4813,-32.49103)" />
|
||||
<path
|
||||
style="font-size:59.901077px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;fill:#75a1d0;fill-opacity:1.0000000;stroke:#3465a4;stroke-width:1.0000004px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
|
||||
d="M 27.514356,37.542682 L 27.514356,28.515722 L 37.492820,28.475543 L 37.492820,21.480219 L 27.523285,21.480219 L 27.514356,11.520049 L 20.498082,11.531210 L 20.502546,21.462362 L 10.512920,21.536022 L 10.477206,28.504561 L 20.511475,28.475543 L 20.518171,37.515896 L 27.514356,37.542682 z "
|
||||
id="text1314"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
style="font-size:59.901077px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125.00000%;writing-mode:lr-tb;text-anchor:start;opacity:0.40860215;fill:url(#linearGradient4975);fill-opacity:1.0000000;stroke:url(#linearGradient7922);stroke-width:1.0000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;font-family:Bitstream Vera Sans"
|
||||
d="M 26.498702,36.533920 L 26.498702,27.499738 L 36.501304,27.499738 L 36.494607,22.475309 L 26.507630,22.475309 L 26.507630,12.480335 L 21.512796,12.498193 L 21.521725,22.475309 L 11.495536,22.493166 L 11.468750,27.466256 L 21.533143,27.475185 L 21.519750,36.502670 L 26.498702,36.533920 z "
|
||||
id="path7076"
|
||||
sodipodi:nodetypes="ccccccccccccc" />
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1.0000000;fill-rule:evenodd;stroke:none;stroke-width:1.0000000px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1.0000000;opacity:0.31182796"
|
||||
d="M 11.000000,25.000000 C 11.000000,26.937500 36.984375,24.031250 36.984375,24.968750 L 36.984375,21.968750 L 27.000000,22.000000 L 27.000000,12.034772 L 21.000000,12.034772 L 21.000000,22.000000 L 11.000000,22.000000 L 11.000000,25.000000 z "
|
||||
id="path7914"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 14 KiB |
336
fp-plugins/commentcenter/imgs/process-stop.svg
Normal file
@ -0,0 +1,336 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48.000000px"
|
||||
height="48.000000px"
|
||||
id="svg6361"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.46"
|
||||
sodipodi:docbase="/home/jimmac/gfx/ximian/tango-icon-theme/scalable/actions"
|
||||
sodipodi:docname="process-stop.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape">
|
||||
<defs
|
||||
id="defs3">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 24 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="48 : 24 : 1"
|
||||
inkscape:persp3d-origin="24 : 16 : 1"
|
||||
id="perspective52" />
|
||||
<linearGradient
|
||||
id="linearGradient2256">
|
||||
<stop
|
||||
style="stop-color:#ff0202;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2258" />
|
||||
<stop
|
||||
style="stop-color:#ff9b9b;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop2260" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2248">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2250" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2252" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient9647">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop9649" />
|
||||
<stop
|
||||
style="stop-color:#dbdbdb;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop9651" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient21644">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop21646" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop21648" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient21644"
|
||||
id="radialGradient21650"
|
||||
cx="25.125"
|
||||
cy="36.75"
|
||||
fx="25.125"
|
||||
fy="36.75"
|
||||
r="15.75"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.595238,-2.300678e-15,14.87500)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient7895">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop7897" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop7899" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4981">
|
||||
<stop
|
||||
style="stop-color:#cc0000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4983" />
|
||||
<stop
|
||||
style="stop-color:#b30000;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop4985" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient15762"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop15764"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop15766"
|
||||
offset="1"
|
||||
style="stop-color:#ffffff;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient14236">
|
||||
<stop
|
||||
id="stop14238"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ed4040;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop14240"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#a40000;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11780">
|
||||
<stop
|
||||
style="stop-color:#ff8b8b;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop11782" />
|
||||
<stop
|
||||
style="stop-color:#ec1b1b;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop11784" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient11014">
|
||||
<stop
|
||||
style="stop-color:#a80000;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop11016" />
|
||||
<stop
|
||||
style="stop-color:#c60000;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop13245" />
|
||||
<stop
|
||||
style="stop-color:#e50000;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop11018" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
y2="9.6507530"
|
||||
x2="9.8940229"
|
||||
y1="5.3855424"
|
||||
x1="5.7365270"
|
||||
gradientTransform="matrix(-1.000000,0.000000,0.000000,-1.000000,31.72170,31.29079)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="linearGradient15772"
|
||||
xlink:href="#linearGradient15762"
|
||||
inkscape:collect="always" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient11780"
|
||||
id="linearGradient2057"
|
||||
x1="15.737001"
|
||||
y1="12.503600"
|
||||
x2="53.570126"
|
||||
y2="47.374317"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0.000000,-2.000000)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4981"
|
||||
id="linearGradient4987"
|
||||
x1="23.995985"
|
||||
y1="20.105337"
|
||||
x2="41.047836"
|
||||
y2="37.959785"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0.000000,-2.000000)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient7895"
|
||||
id="linearGradient7901"
|
||||
x1="15.578875"
|
||||
y1="16.285088"
|
||||
x2="32.166405"
|
||||
y2="28.394291"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient9647"
|
||||
id="radialGradient2239"
|
||||
cx="24.30225"
|
||||
cy="33.30225"
|
||||
fx="24.30225"
|
||||
fy="33.30225"
|
||||
r="12.30225"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.693981,-5.775714e-16,5.775714e-16,1.693981,-16.86529,-25.11111)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4981"
|
||||
id="linearGradient2243"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="23.995985"
|
||||
y1="20.105337"
|
||||
x2="41.047836"
|
||||
y2="37.959785"
|
||||
gradientTransform="matrix(0.988373,0.000000,0.000000,0.988373,0.279002,0.278984)" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2248"
|
||||
id="radialGradient2254"
|
||||
cx="16.75"
|
||||
cy="10.666344"
|
||||
fx="16.75"
|
||||
fy="10.666344"
|
||||
r="21.25"
|
||||
gradientTransform="matrix(4.154957,-2.979206e-24,3.255657e-24,3.198723,-52.84553,-23.50921)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2256"
|
||||
id="linearGradient2262"
|
||||
x1="21.75"
|
||||
y1="15.80225"
|
||||
x2="24.30225"
|
||||
y2="35.05225"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0.000000,-2.000000)" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:guide-bbox="true"
|
||||
showguides="true"
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="0.15294118"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="4"
|
||||
inkscape:cx="0.007276"
|
||||
inkscape:cy="7.0544576"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="786"
|
||||
inkscape:window-height="688"
|
||||
inkscape:window-x="488"
|
||||
inkscape:window-y="160"
|
||||
inkscape:showpageshadow="false" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>Stop</dc:title>
|
||||
<dc:date>2005-10-16</dc:date>
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Andreas Nilsson</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>stop</rdf:li>
|
||||
<rdf:li>halt</rdf:li>
|
||||
<rdf:li>error</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/publicdomain/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.63068183;color:#000000;fill:url(#radialGradient21650);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
id="path21642"
|
||||
sodipodi:cx="25.125"
|
||||
sodipodi:cy="36.75"
|
||||
sodipodi:rx="15.75"
|
||||
sodipodi:ry="9.375"
|
||||
d="M 40.875 36.75 A 15.75 9.375 0 1 1 9.375,36.75 A 15.75 9.375 0 1 1 40.875 36.75 z"
|
||||
transform="matrix(1.173803,0.000000,0.000000,0.600000,-5.265866,19.57500)" />
|
||||
<path
|
||||
style="fill:url(#linearGradient4987);fill-opacity:1;fill-rule:evenodd;stroke:#860000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 15.591006,0.4919213 L 32.676311,0.4919213 L 45.497585,13.586385 L 45.497585,31.48003 L 32.848986,43.496929 L 15.418649,43.496929 L 2.4943857,30.658264 L 2.4943857,13.464078 L 15.591006,0.4919213 z "
|
||||
id="path9480"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="opacity:0.81318683;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2057);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
|
||||
d="M 16.020655,1.5003424 L 32.248563,1.5003424 L 44.496456,13.922717 L 44.496456,31.037001 L 32.638472,42.48783 L 15.870253,42.48783 L 3.5090792,30.208718 L 3.5090792,13.84561 L 16.020655,1.5003424 z "
|
||||
id="path9482"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="opacity:0.28977272;fill:url(#radialGradient2254);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 15.6875,0.75 L 2.75,13.5625 L 2.75,30.5625 L 5.6875,33.46875 C 22.450041,33.526299 22.164665,20.450067 45.25,21.59375 L 45.25,13.6875 L 32.5625,0.75 L 15.6875,0.75 z "
|
||||
id="path2241"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<path
|
||||
style="fill:url(#radialGradient2239);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient2262);stroke-width:0.99999958;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 16.767175,10.5 L 12.5,14.767175 L 20.035075,22.30225 L 12.5,29.837325 L 16.767175,34.104501 L 24.30225,26.569425 L 31.837325,34.104501 L 36.104501,29.837325 L 28.569425,22.30225 L 36.104501,14.767175 L 31.837325,10.5 L 24.30225,18.035075 L 16.767175,10.5 z "
|
||||
id="path2787" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
BIN
fp-plugins/commentcenter/imgs/publish.png
Normal file
After Width: | Height: | Size: 443 B |
BIN
fp-plugins/commentcenter/imgs/spam.png
Normal file
After Width: | Height: | Size: 828 B |
648
fp-plugins/commentcenter/imgs/stock_search-and-replace.svg
Normal file
@ -0,0 +1,648 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:export-ydpi="30"
|
||||
inkscape:export-xdpi="30"
|
||||
inkscape:export-filename="/home/garrett/edit-find-replace-16.png"
|
||||
sodipodi:docname="stock_search-and-replace.svg"
|
||||
inkscape:version="0.47 r22583"
|
||||
sodipodi:version="0.32"
|
||||
id="svg249"
|
||||
height="48.000000px"
|
||||
width="48.000000px"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
version="1.1">
|
||||
<defs
|
||||
id="defs3">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 24 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="48 : 24 : 1"
|
||||
inkscape:persp3d-origin="24 : 16 : 1"
|
||||
id="perspective144" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient5031"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5060">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5062" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5064" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5060"
|
||||
id="radialGradient5029"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
|
||||
cx="605.71429"
|
||||
cy="486.64789"
|
||||
fx="605.71429"
|
||||
fy="486.64789"
|
||||
r="117.14286" />
|
||||
<linearGradient
|
||||
id="linearGradient5048">
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="0"
|
||||
id="stop5050" />
|
||||
<stop
|
||||
id="stop5056"
|
||||
offset="0.5"
|
||||
style="stop-color:black;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:black;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop5052" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5048"
|
||||
id="linearGradient5027"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
|
||||
x1="302.85715"
|
||||
y1="366.64789"
|
||||
x2="302.85715"
|
||||
y2="609.50507" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4542">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4544" />
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop4546" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient15662">
|
||||
<stop
|
||||
id="stop15664"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop15666"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="aigrd3"
|
||||
cx="20.8921"
|
||||
cy="64.5679"
|
||||
r="5.257"
|
||||
fx="20.8921"
|
||||
fy="64.5679"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15573" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15575" />
|
||||
</radialGradient>
|
||||
<radialGradient
|
||||
id="aigrd2"
|
||||
cx="20.8921"
|
||||
cy="114.5684"
|
||||
r="5.256"
|
||||
fx="20.8921"
|
||||
fy="114.5684"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#F0F0F0"
|
||||
id="stop15566" />
|
||||
<stop
|
||||
offset="1.0000000"
|
||||
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
|
||||
id="stop15568" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient269">
|
||||
<stop
|
||||
id="stop270"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop271"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient259">
|
||||
<stop
|
||||
id="stop260"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#fafafa;stop-opacity:1.0000000;" />
|
||||
<stop
|
||||
id="stop261"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient269"
|
||||
id="radialGradient15656"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
|
||||
cx="8.8244190"
|
||||
cy="3.7561285"
|
||||
fx="8.8244190"
|
||||
fy="3.7561285"
|
||||
r="37.751713" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient259"
|
||||
id="radialGradient15658"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="scale(0.960493,1.041132)"
|
||||
cx="33.966679"
|
||||
cy="35.736916"
|
||||
fx="33.966679"
|
||||
fy="35.736916"
|
||||
r="86.708450" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient15662"
|
||||
id="radialGradient15668"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.968273,0,0,1.032767,3.353553,0.646447)"
|
||||
cx="8.1435566"
|
||||
cy="7.2678967"
|
||||
fx="8.1435566"
|
||||
fy="7.2678967"
|
||||
r="38.158695" />
|
||||
<radialGradient
|
||||
r="5.256"
|
||||
fy="114.5684"
|
||||
fx="20.8921"
|
||||
cy="114.5684"
|
||||
cx="20.8921"
|
||||
gradientTransform="matrix(0.229703,0.000000,0.000000,0.229703,4.613529,3.979808)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient2283"
|
||||
xlink:href="#aigrd2"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
r="5.257"
|
||||
fy="64.5679"
|
||||
fx="20.8921"
|
||||
cy="64.5679"
|
||||
cx="20.8921"
|
||||
gradientTransform="matrix(0.229703,0.000000,0.000000,0.229703,4.613529,3.979808)"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
id="radialGradient2285"
|
||||
xlink:href="#aigrd3"
|
||||
inkscape:collect="always" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4542"
|
||||
id="radialGradient4548"
|
||||
cx="24.306795"
|
||||
cy="42.07798"
|
||||
fx="24.306795"
|
||||
fy="42.07798"
|
||||
r="15.821514"
|
||||
gradientTransform="matrix(1.000000,0.000000,0.000000,0.284916,0.000000,30.08928)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
id="linearGradient4440">
|
||||
<stop
|
||||
id="stop4442"
|
||||
offset="0"
|
||||
style="stop-color:#7d7d7d;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#b1b1b1;stop-opacity:1.0000000;"
|
||||
offset="0.50000000"
|
||||
id="stop4448" />
|
||||
<stop
|
||||
id="stop4444"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#686868;stop-opacity:1.0000000;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4454">
|
||||
<stop
|
||||
id="stop4456"
|
||||
offset="0.0000000"
|
||||
style="stop-color:#729fcf;stop-opacity:0.20784314;" />
|
||||
<stop
|
||||
id="stop4458"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#729fcf;stop-opacity:0.67619050;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4467">
|
||||
<stop
|
||||
id="stop4469"
|
||||
offset="0"
|
||||
style="stop-color:#ffffff;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4471"
|
||||
offset="1.0000000"
|
||||
style="stop-color:#ffffff;stop-opacity:0.24761905;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4477"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop4479"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop4481"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2366">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2368" />
|
||||
<stop
|
||||
id="stop2374"
|
||||
offset="0.50000000"
|
||||
style="stop-color:#ffffff;stop-opacity:0.21904762;" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2370" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2846">
|
||||
<stop
|
||||
style="stop-color:#8a8a8a;stop-opacity:1.0000000;"
|
||||
offset="0.0000000"
|
||||
id="stop2848" />
|
||||
<stop
|
||||
style="stop-color:#484848;stop-opacity:1.0000000;"
|
||||
offset="1.0000000"
|
||||
id="stop2850" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2865"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2867"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2869"
|
||||
offset="1"
|
||||
style="stop-color:#000000;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2966">
|
||||
<stop
|
||||
id="stop2968"
|
||||
offset="0"
|
||||
style="stop-color:#ffd1d1;stop-opacity:1;" />
|
||||
<stop
|
||||
style="stop-color:#ff1d1d;stop-opacity:1;"
|
||||
offset="0.5"
|
||||
id="stop3006" />
|
||||
<stop
|
||||
id="stop2970"
|
||||
offset="1"
|
||||
style="stop-color:#6f0000;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2974">
|
||||
<stop
|
||||
id="stop2976"
|
||||
offset="0"
|
||||
style="stop-color:#c1c1c1;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2978"
|
||||
offset="1"
|
||||
style="stop-color:#acacac;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2984"
|
||||
inkscape:collect="always">
|
||||
<stop
|
||||
id="stop2986"
|
||||
offset="0"
|
||||
style="stop-color:#e7e2b8;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2988"
|
||||
offset="1"
|
||||
style="stop-color:#e7e2b8;stop-opacity:0;" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2994">
|
||||
<stop
|
||||
id="stop2996"
|
||||
offset="0"
|
||||
style="stop-color:#000000;stop-opacity:1;" />
|
||||
<stop
|
||||
id="stop2998"
|
||||
offset="1"
|
||||
style="stop-color:#c9c9c9;stop-opacity:1;" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4477"
|
||||
id="radialGradient2504"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.237968,-1.591178e-15,28.93278)"
|
||||
cx="24.130018"
|
||||
cy="37.967922"
|
||||
fx="24.130018"
|
||||
fy="37.967922"
|
||||
r="16.528622" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2865"
|
||||
id="radialGradient2552"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.348243,0,26.35543)"
|
||||
cx="23.5625"
|
||||
cy="40.4375"
|
||||
fx="23.5625"
|
||||
fy="40.4375"
|
||||
r="19.5625" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2966"
|
||||
id="linearGradient2554"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-5.669292,0)"
|
||||
x1="48.90625"
|
||||
y1="17.376184"
|
||||
x2="50.988335"
|
||||
y2="22.250591" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2974"
|
||||
id="linearGradient2556"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-5.669292,0)"
|
||||
x1="46"
|
||||
y1="19.8125"
|
||||
x2="47.6875"
|
||||
y2="22.625" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2984"
|
||||
id="radialGradient2558"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.923565,0,0,2.029717,-61.55532,-27.88417)"
|
||||
cx="29.053354"
|
||||
cy="27.640751"
|
||||
fx="29.053354"
|
||||
fy="27.640751"
|
||||
r="3.2408544" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2994"
|
||||
id="linearGradient2560"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-5.825542,0.125)"
|
||||
x1="25.71875"
|
||||
y1="31.046875"
|
||||
x2="25.514589"
|
||||
y2="30.703125" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2846"
|
||||
id="linearGradient2730"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1,0,0,1,48.18409,-6.22072e-15)"
|
||||
x1="27.366341"
|
||||
y1="26.580296"
|
||||
x2="31.335964"
|
||||
y2="30.557772" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4440"
|
||||
id="linearGradient2732"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1.334593,0,0,1.291292,55.15793,-7.460658)"
|
||||
x1="30.656250"
|
||||
y1="34.000000"
|
||||
x2="33.218750"
|
||||
y2="31.062500" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2366"
|
||||
id="linearGradient2734"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1,0,0,1,44.17827,-7.045146e-16)"
|
||||
x1="18.292673"
|
||||
y1="13.602121"
|
||||
x2="17.500893"
|
||||
y2="25.743469" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4454"
|
||||
id="radialGradient2736"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(-1,0,0,1,43.352,1.032377e-15)"
|
||||
cx="18.240929"
|
||||
cy="21.817987"
|
||||
fx="18.240929"
|
||||
fy="21.817987"
|
||||
r="8.3085051" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4467"
|
||||
id="radialGradient2738"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(2.592963,-7.7469e-24,-5.714443e-24,2.252104,-25.05976,-18.941)"
|
||||
cx="15.414371"
|
||||
cy="13.078408"
|
||||
fx="15.414371"
|
||||
fy="13.078408"
|
||||
r="6.6562500" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-height="949"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:document-units="px"
|
||||
inkscape:grid-bbox="true"
|
||||
showgrid="true"
|
||||
inkscape:current-layer="layer5"
|
||||
inkscape:cy="22.784511"
|
||||
inkscape:cx="32.576122"
|
||||
inkscape:zoom="16"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
borderopacity="0.59607843"
|
||||
bordercolor="#434343"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:showpageshadow="false"
|
||||
borderlayer="true"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata4">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
<dc:subject>
|
||||
<rdf:Bag>
|
||||
<rdf:li>edit</rdf:li>
|
||||
<rdf:li>find</rdf:li>
|
||||
<rdf:li>locate</rdf:li>
|
||||
<rdf:li>search</rdf:li>
|
||||
</rdf:Bag>
|
||||
</dc:subject>
|
||||
<cc:license
|
||||
rdf:resource="http://creativecommons.org/licenses/publicdomain/" />
|
||||
<dc:creator>
|
||||
<cc:Agent>
|
||||
<dc:title>Garrett LeSage</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:creator>
|
||||
<dc:source />
|
||||
<dc:contributor>
|
||||
<cc:Agent>
|
||||
<dc:title>Jakub Steiner, Steven Garrity</dc:title>
|
||||
</cc:Agent>
|
||||
</dc:contributor>
|
||||
</cc:Work>
|
||||
<cc:License
|
||||
rdf:about="http://creativecommons.org/licenses/publicdomain/">
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||
<cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||
</cc:License>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer6"
|
||||
inkscape:label="Shadow"
|
||||
style="display:inline" />
|
||||
<g
|
||||
style="display:inline"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="Base"
|
||||
id="layer1">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.98855311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.01754384"
|
||||
d="m 11.505723,5.4942766 0,37.9065924"
|
||||
id="path15672"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer5"
|
||||
inkscape:label="Magnifying Glass"
|
||||
style="display:inline">
|
||||
<path
|
||||
inkscape:r_cy="true"
|
||||
inkscape:r_cx="true"
|
||||
transform="matrix(1.0734824,0,0,0.51109813,-0.2939296,22.850613)"
|
||||
d="m 43.125,40.4375 a 19.5625,6.8125 0 1 1 -39.125,0 19.5625,6.8125 0 1 1 39.125,0 z"
|
||||
sodipodi:ry="6.8125"
|
||||
sodipodi:rx="19.5625"
|
||||
sodipodi:cy="40.4375"
|
||||
sodipodi:cx="23.5625"
|
||||
id="path3008"
|
||||
style="opacity:0.2;color:#000000;fill:url(#radialGradient2552);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
sodipodi:type="arc" />
|
||||
<g
|
||||
id="g1574"
|
||||
transform="matrix(1.7305364,-0.48312911,0.46369613,1.8030612,-0.54253358,-56.70978)"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true">
|
||||
<path
|
||||
transform="translate(-29.75546,19)"
|
||||
sodipodi:nodetypes="cccccc"
|
||||
id="path2960"
|
||||
d="m 17.34116,32.5 5.625,-5.625 20.093749,-9.75 c 3.25,-1.25 5.1875,3.375 2.3125,5 L 25.34116,31.5 l -8,1 z"
|
||||
style="color:#000000;fill:#cb9022;fill-opacity:1;fill-rule:evenodd;stroke:#5c410c;stroke-width:0.93443578;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
transform="translate(-29.75546,19)"
|
||||
style="color:#000000;fill:url(#linearGradient2554);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
d="m 38.330708,20 c 0,0 1.4375,0.09375 2,1.34375 0.579493,1.287761 0,2.65625 0,2.65625 l 5.03125,-2.46875 c 0,0 1.452032,-0.881367 0.65625,-2.84375 -0.784912,-1.935577 -2.6875,-1.15625 -2.6875,-1.15625 l -5,2.46875 z"
|
||||
id="path2964"
|
||||
sodipodi:nodetypes="czcczcc"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
transform="translate(-29.75546,19)"
|
||||
sodipodi:nodetypes="czcczcc"
|
||||
id="path2962"
|
||||
d="m 38.330708,20 c 0,0 1.4375,0.09375 2,1.34375 0.579493,1.287761 0,2.65625 0,2.65625 l 2,-1 c 0,0 0.827032,-1.318867 0.21875,-2.6875 C 41.924458,18.90625 40.330708,19 40.330708,19 l -2,1 z"
|
||||
style="color:#000000;fill:url(#linearGradient2556);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
transform="translate(-29.75546,19)"
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path2982"
|
||||
d="m 18.768208,31.78125 4.5,-4.5 c 1.5,0.8125 2.28125,2.15625 1.875,3.71875 l -6.375,0.78125 z"
|
||||
style="color:#000000;fill:url(#radialGradient2558);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
transform="translate(-29.75546,19)"
|
||||
sodipodi:nodetypes="cccc"
|
||||
id="path2992"
|
||||
d="m 20.111958,30.375 -1.625,1.59375 2.34375,-0.3125 c 0.21875,-0.71875 -0.1875,-1.0625 -0.71875,-1.28125 z"
|
||||
style="color:#000000;fill:url(#linearGradient2560);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
transform="translate(-29.75546,19)"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path3002"
|
||||
d="m 23.268208,27.25 1.5625,1.25 15.38734,-7.31867 C 39.773616,20.325286 38.976281,20.096733 38.314669,20.019068 L 23.268208,27.25 z"
|
||||
style="color:#000000;fill:#ffffff;fill-opacity:0.36363639;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
<path
|
||||
transform="translate(-29.75546,19)"
|
||||
sodipodi:nodetypes="ccccc"
|
||||
id="path3004"
|
||||
d="m 25.143208,31.0625 0.1875,-0.75 15.23109,-7.1296 c 0,0 -0.11016,0.613627 -0.215879,0.74935 L 25.143208,31.0625 z"
|
||||
style="color:#000000;fill:#000000;fill-opacity:0.36363639;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
|
||||
inkscape:r_cx="true"
|
||||
inkscape:r_cy="true" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 21 KiB |
BIN
fp-plugins/commentcenter/imgs/up.png
Normal file
After Width: | Height: | Size: 525 B |
814
fp-plugins/commentcenter/inc/admin.php
Normal file
@ -0,0 +1,814 @@
|
||||
<?php
|
||||
/**
|
||||
* This is the administration panel for the plugin Flatpress Comment Center.
|
||||
*/
|
||||
|
||||
if(!class_exists('plugin_commentcenter')) {
|
||||
die('Don\'t try to hack us.');
|
||||
}
|
||||
|
||||
class admin_entry_commentcenter extends AdminPanelAction {
|
||||
|
||||
# The language files
|
||||
var $langres='plugin:commentcenter';
|
||||
# The commands
|
||||
var $commands=array('configure', 'polup', 'poldown', 'poledit', 'poldelete', 'approve_list',
|
||||
'publishcomm', 'pubnoham', 'deletecomm', 'manage', 'deletecomm2', 'commspam');
|
||||
# The submits
|
||||
var $events=array('configure', 'edit_policy', 'delok', 'cancel', 'multidel', 'mpubcomm', 'mdelcomm',
|
||||
'commdelok', 'ccancel', 'entry_search', 'mdelcomm_2', 'commdelok_2', 'ccancel_2');
|
||||
|
||||
/**
|
||||
* This function is used as a callback when the panel is loaded.
|
||||
* It indicates the Smarty template and it saves by reference the
|
||||
* main class of the plugin Comment Center.
|
||||
*/
|
||||
function setup() {
|
||||
global $lang;
|
||||
$this->plugin=&$GLOBALS['plugin_commentcenter'];
|
||||
$smarty=&$this->smarty;
|
||||
|
||||
# The default TPL
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/policies');
|
||||
$smarty->assign('plugin_url', plugin_geturl('commentcenter'));
|
||||
|
||||
$smarty->register_modifier('idToSubject', array(&$this, '_idToTitle'));
|
||||
add_filter('wp_title', array(&$this, '_title'), 15, 2);
|
||||
add_action('wp_head', array(&$this, '_head'), 10);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the hook system.
|
||||
* It sets the title.
|
||||
*
|
||||
* @param string $val: The current title
|
||||
* @param string $sep: The separator
|
||||
* @return string: The title
|
||||
*/
|
||||
function _title($val, $sep) {
|
||||
return "{$val} {$sep} Comment Center";
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the hook system.
|
||||
* It adds the javascript of the plugin.
|
||||
*/
|
||||
function _head() {
|
||||
if(!function_exists('plugin_jquery_head')) {
|
||||
return;
|
||||
}
|
||||
$src1=plugin_geturl('commentcenter').'res/ajax.js';
|
||||
$src2=BLOG_BASEURL.'admin.php?jslang=commentcenter';
|
||||
echo '<script type="text/javascript" src="'.$src1."\"></script>\n";
|
||||
echo '<script type="text/javascript" src="'.$src2."\"></script>\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* This function return the entry title from the id.
|
||||
* It's made to be called from Smarty.
|
||||
*
|
||||
* @param string $id: The entry id
|
||||
* @return string: The output
|
||||
*/
|
||||
function _idToTitle($id) {
|
||||
$o=new FPDB_Query(array('start'=>0, 'count'=>1, 'fullparse'=>false, 'id'=>$id), null);
|
||||
if(!$o->hasMore()) {
|
||||
return false;
|
||||
}
|
||||
$arr=$o->getEntry();
|
||||
return wp_specialchars($arr[1]['subject']);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is an advanced redirect option.
|
||||
*
|
||||
* @param string $cmd: The command
|
||||
* @param mixed $cmdval: The value for the command
|
||||
* @param boolean $nosuccess: Don't save the success?
|
||||
*/
|
||||
function _redirect($cmd, $cmdval=1, $nosuccess=false) {
|
||||
global $panel;
|
||||
$smarty=&$this->smarty;
|
||||
sess_add("success_{$panel}", $smarty->get_template_vars('success'));
|
||||
|
||||
$action_url=$smarty->get_template_vars('action_url');
|
||||
$url=admin_filter_command($action_url, $cmd, $cmdval);
|
||||
$url=html_entity_decode($url);
|
||||
$url=substr($url, strlen(BLOG_BASEURL));
|
||||
utils_redirect($url);
|
||||
die;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the main function of the panel.
|
||||
*/
|
||||
function main() {
|
||||
$smarty=&$this->smarty;
|
||||
$plugin=&$this->plugin;
|
||||
$plugin->loadPolicies();
|
||||
$smarty->assign('policies', $plugin->policies);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the callback for the configure command.
|
||||
*/
|
||||
function doconfigure() {
|
||||
global $lang;
|
||||
$plugin=&$this->plugin;
|
||||
$conf=$plugin->getConf();
|
||||
|
||||
$smarty=&$this->smarty;
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/configure');
|
||||
$smarty->assign('pl_conf', $conf);
|
||||
|
||||
$conf=$plugin->getConf();
|
||||
if($conf['akismet_check']) {
|
||||
$akismet=$plugin->akismetLoad();
|
||||
if(is_numeric($akismet)) {
|
||||
$error=$lang['admin']['entry']['commentcenter']['akismet_errors'][$akismet];
|
||||
$smarty->assign('warnings', $error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This callback is used when the configuration is saved.
|
||||
*/
|
||||
function onconfigure() {
|
||||
if(!empty($_POST['akismet_url'])) {
|
||||
$pos=strpos($_POST['akismet_url'], '//');
|
||||
if($pos===FALSE || $pos>8) {
|
||||
$_POST['akismet_url']='http://'.$_POST['akismet_url'];
|
||||
}
|
||||
}
|
||||
|
||||
$save=array('log_all'=>isset($_POST['log_all']),
|
||||
'email_alert'=>isset($_POST['email_alert']),
|
||||
'akismet_check'=>isset($_POST['akismet_check']),
|
||||
'akismet_key'=>$_POST['akismet_key'],
|
||||
'akismet_url'=>$_POST['akismet_url']);
|
||||
// It doesn't make very sense: I could just use array_merge but...
|
||||
foreach($save as $key=>$value) {
|
||||
plugin_addoption('commentcenter', $key, $value);
|
||||
}
|
||||
|
||||
$success=plugin_saveoptions() ? 1 : -1;
|
||||
$this->smarty->assign('success', $success);
|
||||
$this->_redirect('configure');
|
||||
}
|
||||
|
||||
/**
|
||||
* The edit policy/new policy action callback.
|
||||
*
|
||||
* @param integer $id: The policy id. -1 means a new one
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function dopoledit($id) {
|
||||
global $lang;
|
||||
$plugin=&$this->plugin;
|
||||
$smarty=&$this->smarty;
|
||||
$plang=&$lang['admin']['entry']['commentcenter'];
|
||||
|
||||
$plugin->loadPolicies();
|
||||
$smarty->assign('policy', array());
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/editpol');
|
||||
$smarty->assign('pol_id', $id);
|
||||
|
||||
if($id!=-1 && isset($plugin->policies[$id])) {
|
||||
$smarty->assign('policy', $plugin->policies[$id]);
|
||||
} elseif($id!=-1) {
|
||||
# Inexistent policy
|
||||
$smarty->assign('errors', $plang['errors']['pol_nonex']);
|
||||
} else {
|
||||
$smarty->assign('polnew', true);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* The edit policy/new policy save callback.
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function onedit_policy() {
|
||||
$plugin=&$this->plugin;
|
||||
$success=2;
|
||||
$policy=array();
|
||||
@$id=$_POST['policy_id'];
|
||||
|
||||
$plugin->loadPolicies();
|
||||
if($id!=-1 && !isset($plugin->policies[$id])) {
|
||||
$success=-2;
|
||||
}
|
||||
|
||||
while(true && $success==2) {
|
||||
if(empty($_POST['apply_to'])) {
|
||||
$success=-2;
|
||||
break;
|
||||
}
|
||||
if(!isset($_POST['behavoir'])) {
|
||||
$success=-2;
|
||||
break;
|
||||
}
|
||||
|
||||
$behavoir=$_POST['behavoir'];
|
||||
if($behavoir!=1 && $behavoir!=0 && $behavoir!=-1) {
|
||||
$success=-2;
|
||||
break;
|
||||
}
|
||||
$policy['do']=$behavoir;
|
||||
|
||||
switch($_POST['apply_to']) {
|
||||
case 'all_entries':
|
||||
$policy['is_all']=true;
|
||||
break 2;
|
||||
case 'some_entries':
|
||||
if(empty($_POST['entries'])) {
|
||||
$success=-2;
|
||||
} else {
|
||||
$entries=array();
|
||||
foreach($_POST['entries'] as $entry) {
|
||||
if(entry_exists($entry)) {
|
||||
$entries[]=$entry;
|
||||
}
|
||||
}
|
||||
if(count($entries)==0) {
|
||||
$success=-2;
|
||||
} else {
|
||||
$entries=array_unique($entries);
|
||||
$policy['entry']=$entries;
|
||||
}
|
||||
}
|
||||
break 2;
|
||||
case 'properties':
|
||||
$policy['is_all']=true;
|
||||
if(isset($_POST['cats'])) {
|
||||
$policy['categories']=array_keys($_POST['cats']);
|
||||
$policy['is_all']=false;
|
||||
}
|
||||
if(is_numeric($_POST['older'])) {
|
||||
# Save in seconds
|
||||
$policy['older']=$_POST['older']*86400;
|
||||
$policy['is_all']=false;
|
||||
}
|
||||
if(isset($policy['is_all']) && @!$policy['is_all']) {
|
||||
unset($policy['is_all']);
|
||||
}
|
||||
break 2;
|
||||
default:
|
||||
$success=-2;
|
||||
break 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if($success==2) {
|
||||
if($id==-1) {
|
||||
$plugin->policies[]=$policy;
|
||||
} else {
|
||||
$plugin->policies[$id]=$policy;
|
||||
}
|
||||
$success=$plugin->savePolicies() ? 2 : -2;
|
||||
}
|
||||
|
||||
$this->smarty->assign('success', $success);
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the poldelete action.
|
||||
*
|
||||
* @param integer $id: The id of policy you wish to delete
|
||||
* @return integer: Redirect option
|
||||
*/
|
||||
function dopoldelete($id) {
|
||||
$plugin=&$this->plugin;
|
||||
$smarty=&$this->smarty;
|
||||
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/deletepol');
|
||||
$plugin->loadPolicies();
|
||||
|
||||
if(isset($plugin->policies[$id])) {
|
||||
$smarty->assign('policies', array($id=>$plugin->policies[$id]));
|
||||
}
|
||||
$smarty->assign('single', true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is like dopoldelete but it's for multiple policies.
|
||||
*
|
||||
* @return integer: Redirect option
|
||||
*/
|
||||
function onmultidel() {
|
||||
$plugin=&$this->plugin;
|
||||
$smarty=&$this->smarty;
|
||||
|
||||
if(@!count($_POST['select'])) {
|
||||
$smarty->assign('success', -4);
|
||||
return 2;
|
||||
}
|
||||
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/deletepol');
|
||||
$plugin->loadPolicies();
|
||||
$policies=array();
|
||||
|
||||
foreach($_POST['select'] as $polid=>$checkvalue) {
|
||||
if(isset($plugin->policies[$polid])) {
|
||||
$policies[$polid]=$plugin->policies[$polid];
|
||||
}
|
||||
}
|
||||
|
||||
if(count($policies)>0) {
|
||||
$smarty->assign('policies', $policies);
|
||||
} else {
|
||||
$smarty->assign('success', -4);
|
||||
return 2;
|
||||
}
|
||||
|
||||
if(count($policies)==1) {
|
||||
$smarty->assign('single', true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the delete ok command.
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function ondelok() {
|
||||
if(empty($_POST['del_policy'])) {
|
||||
$s=-4;
|
||||
} else {
|
||||
$plugin=$this->plugin;
|
||||
$plugin->loadPolicies();
|
||||
foreach($_POST['del_policy'] as $polid) {
|
||||
if(isset($plugin->policies[$polid])) {
|
||||
unset($plugin->policies[$polid]);
|
||||
}
|
||||
}
|
||||
$s=$plugin->savePolicies() ? 4 : -4;
|
||||
}
|
||||
$this->smarty->assign('success', $s);
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the cancel callback. It just makes the redirect.
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function oncancel() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the polup action.
|
||||
*
|
||||
* @param integer $id: The id of policy you wish to delete
|
||||
* @return integer: Redirect option
|
||||
*/
|
||||
function dopolup($id) {
|
||||
$s=-3;
|
||||
|
||||
if($id>0) {
|
||||
$plugin=&$this->plugin;
|
||||
$plugin->loadPolicies();
|
||||
$plugin->policyMove($id, $id-1);
|
||||
$s=$plugin->savePolicies() ? 3 : -3;
|
||||
}
|
||||
|
||||
$this->smarty->assign('success', $s);
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the poldown action.
|
||||
*
|
||||
* @param integer $id: The id of policy you wish to delete
|
||||
* @return integer: Redirect option
|
||||
*/
|
||||
function dopoldown($id) {
|
||||
$s=-3;
|
||||
|
||||
$plugin=&$this->plugin;
|
||||
$plugin->loadPolicies();
|
||||
|
||||
if($id<count($plugin->policies)-1) {
|
||||
$plugin->policyMove($id, $id+1);
|
||||
$s=$plugin->savePolicies() ? 3 : -3;
|
||||
}
|
||||
|
||||
$this->smarty->assign('success', $s);
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the approve_list command
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function doapprove_list() {
|
||||
$plugin=&$this->plugin;
|
||||
$smarty=&$this->smarty;
|
||||
|
||||
$conf=$plugin->getConf();
|
||||
$smarty->assign('use_akismet', @$conf['akismet_check']);
|
||||
$smarty->assign('other', @$conf['log_all']);
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/approvelist');
|
||||
|
||||
$lister=new commentcenter_list($plugin->pl_dir);
|
||||
$smarty->assign('entries', $lister->toDetails());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the publishcomm command
|
||||
*
|
||||
* @param string $id: The comment id
|
||||
* @param boolean $noredirect: If true, don't redirect
|
||||
* @param boolean $noham: If it was blocked from Akismet, don't submit as ham
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function dopublishcomm($id, $noredirect=false, $noham=false) {
|
||||
$plugin=&$this->plugin;
|
||||
$smarty=&$this->smarty;
|
||||
$f=$plugin->pl_dir.$id.'.txt';
|
||||
|
||||
if(!file_exists($f)) {
|
||||
$smarty->assign('success', -5);
|
||||
$succ=-5;
|
||||
} else {
|
||||
|
||||
include $f;
|
||||
|
||||
$entry=substr($id, 1, 18);
|
||||
$ham=false;
|
||||
|
||||
if(isset($comment['log_reason'])) {
|
||||
$ham=$comment['log_reason']=='akismet' && !$noham;
|
||||
unset($comment['log_reason']);
|
||||
}
|
||||
if(isset($comment['id'])) {
|
||||
unset($comment['id']);
|
||||
}
|
||||
|
||||
if($ham) {
|
||||
$clean=$plugin->akismetClean($comment, $entry);
|
||||
$akismet=&$plugin->akismetLoad();
|
||||
if(is_object($akismet)) {
|
||||
$akismet->setComment($clean);
|
||||
$akismet->submitHam();
|
||||
}
|
||||
}
|
||||
|
||||
$id=comment_save($entry, $comment);
|
||||
do_action('comment_post', $entry, array($id, $comment));
|
||||
$succ=$id ? 5 : -5;
|
||||
$smarty->assign('success', $succ);
|
||||
|
||||
if($succ==5) {
|
||||
@unlink($f);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if($noredirect) {
|
||||
return $succ==5;
|
||||
}
|
||||
|
||||
$this->_redirect('approve_list');
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the callback for the action pubnoham.
|
||||
*
|
||||
* @param string $id: The comment id
|
||||
* @return integer: The redirect option.
|
||||
*/
|
||||
function dopubnoham($id) {
|
||||
return $this->dopublishcomm($id, false, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the callback to publish multiple comments.
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function onmpubcomm() {
|
||||
if(!isset($_POST['select'])) {
|
||||
$this->dopublishcomm('fake');
|
||||
}
|
||||
|
||||
$target=count($_POST['select']);
|
||||
$noham=!isset($_POST['submitham']);
|
||||
$i=0;
|
||||
|
||||
foreach((array)$_POST['select'] as $comm=>$check) {
|
||||
$i++;
|
||||
$this->dopublishcomm($comm, $i!=$target, $noham);
|
||||
}
|
||||
|
||||
// If it's correct, we should exited the script before
|
||||
$this->smarty->assign('success', -5);
|
||||
$this->_redirect('approve_list');
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the deletecomm action.
|
||||
*
|
||||
* @param integer $id: The id of the comment you wish to delete
|
||||
* @return integer: Redirect option
|
||||
*/
|
||||
function dodeletecomm($id) {
|
||||
$plugin=&$this->plugin;
|
||||
$smarty=&$this->smarty;
|
||||
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/deletecomm');
|
||||
|
||||
$entry=substr($id, 1, 18);
|
||||
$commid=substr($id, 21, 20);
|
||||
|
||||
$f=$plugin->pl_dir.$id.'.txt';
|
||||
if(file_exists($f)) {
|
||||
include $f;
|
||||
$delete[$entry]['del'][$commid]=$comment;
|
||||
$smarty->assign('entries', $delete);
|
||||
} else {
|
||||
$smarty->assign('success', -6);
|
||||
$this->_redirect('approve_list');
|
||||
}
|
||||
|
||||
$smarty->assign('single', true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is like dopoldelete but it's for multiple policies.
|
||||
*
|
||||
* @return integer: Redirect option
|
||||
*/
|
||||
function onmdelcomm() {
|
||||
$plugin=&$this->plugin;
|
||||
$smarty=&$this->smarty;
|
||||
|
||||
if(@!count($_POST['select'])) {
|
||||
$smarty->assign('success', -6);
|
||||
$this->_redirect('approve_list');
|
||||
return 0;
|
||||
}
|
||||
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/deletecomm');
|
||||
$remove=array();
|
||||
|
||||
foreach($_POST['select'] as $commbig=>$check) {
|
||||
$entry=substr($commbig, 1, 18);
|
||||
$commid=substr($commbig, 21, 20);
|
||||
$f=$plugin->pl_dir.$commbig.'.txt';
|
||||
if(file_exists($f)) {
|
||||
include $f;
|
||||
$remove[$entry]['del'][$commid]=$comment;
|
||||
}
|
||||
}
|
||||
|
||||
if(count($remove)>0) {
|
||||
$smarty->assign('entries', $remove);
|
||||
} else {
|
||||
$smarty->assign('success', -6);
|
||||
$this->_redirect('approve_list');
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(count($remove)==1) {
|
||||
$smarty->assign('single', true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the delete ok command.
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function oncommdelok() {
|
||||
if(empty($_POST['select'])) {
|
||||
$s=-6;
|
||||
} else {
|
||||
foreach($_POST['select'] as $commid=>$check) {
|
||||
$f=$this->plugin->pl_dir.$commid.'.txt';
|
||||
@unlink($f);
|
||||
}
|
||||
$s=6;
|
||||
}
|
||||
$this->smarty->assign('success', $s);
|
||||
$this->_redirect('approve_list');
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the cancel callback. It just makes the redirect.
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function onccancel() {
|
||||
$this->_redirect('approve_list');
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the action "manage".
|
||||
*
|
||||
* @param string $entry: The entry id
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function domanage($entry) {
|
||||
global $lang, $fpdb;
|
||||
$smarty=&$this->smarty;
|
||||
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/manage');
|
||||
$smarty->assign('is_managing', true);
|
||||
|
||||
$conf=$this->plugin->getConf();
|
||||
if(@$conf['akismet_check']) {
|
||||
$smarty->assign('use_akismet', true);
|
||||
}
|
||||
|
||||
if($entry!='search' && !entry_exists($entry)) {
|
||||
$smarty->assign('error', $lang['admin']['entry']['commentcenter']['errors']['entry_nf']);
|
||||
} elseif($entry!='search') {
|
||||
$smarty->assign('entry_id', $entry);
|
||||
$smarty->assign('fetch', 'list');
|
||||
|
||||
$fpdb->query("id:{$entry},fullparse:true,comments:true");
|
||||
$q=&$fpdb->getQuery();
|
||||
$q->getEntry();
|
||||
$list=array();
|
||||
while($q->comments->hasMore()) {
|
||||
list($id, $comment)=$q->comments->getComment();
|
||||
$list[$entry]['list'][$id]=$comment;
|
||||
}
|
||||
$smarty->assign('entries', $list);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Since it's impossible to use a GET form in Flatpress, to search entries
|
||||
* we have to use a POST form, and here's its callback.
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function onentry_search() {
|
||||
if(!isset($_POST['entry'])) {
|
||||
$_POST['entry']='';
|
||||
}
|
||||
// In the function we call 'search' isn't an error, but here yes, so delete it
|
||||
if($_POST['entry']=='search') {
|
||||
$_POST['entry']='';
|
||||
}
|
||||
return @$this->domanage($_POST['entry']);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the deletecomm2 action.
|
||||
*
|
||||
* @param integer $id: The id of the comment you wish to delete
|
||||
* @return integer: Redirect option
|
||||
*/
|
||||
function dodeletecomm2($id) {
|
||||
$smarty=&$this->smarty;
|
||||
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/deletecomm');
|
||||
$smarty->assign('is_managing', true);
|
||||
|
||||
$entry=substr($id, 1, 18);
|
||||
$commid=substr($id, 21, 20);
|
||||
$smarty->assign('entry', $entry);
|
||||
|
||||
if(comment_exists($entry, $commid)) {
|
||||
$delete[$entry]['del'][$commid]=comment_parse($entry, $commid);
|
||||
$smarty->assign('entries', $delete);
|
||||
} else {
|
||||
$smarty->assign('success', -6);
|
||||
$this->_redirect('manage', $entry);
|
||||
}
|
||||
|
||||
$smarty->assign('single', true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is like dopoldelete but it's for multiple policies.
|
||||
*
|
||||
* @return integer: Redirect option
|
||||
*/
|
||||
function onmdelcomm_2() {
|
||||
$smarty=&$this->smarty;
|
||||
|
||||
if(@!count($_POST['select'])) {
|
||||
$smarty->assign('success', -6);
|
||||
$this->_redirect('manage', @$_POST['entry_hid']);
|
||||
return 0;
|
||||
}
|
||||
|
||||
$smarty->assign('admin_resource', 'plugin:commentcenter/deletecomm');
|
||||
$smarty->assign('is_managing', true);
|
||||
$smarty->assign('entry', @$_POST['entry_hid']);
|
||||
$remove=array();
|
||||
|
||||
foreach($_POST['select'] as $commbig=>$check) {
|
||||
$entry=substr($commbig, 1, 18);
|
||||
$commid=substr($commbig, 21, 20);
|
||||
$comment=comment_parse($entry, $commid);
|
||||
if($comment!==false) {
|
||||
$remove[$entry]['del'][$commid]=$comment;
|
||||
}
|
||||
}
|
||||
|
||||
if(count($remove)>0) {
|
||||
$smarty->assign('entries', $remove);
|
||||
} else {
|
||||
$smarty->assign('success', -6);
|
||||
$this->_redirect('manage', @$_POST['entry_hid']);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(count($remove)==1) {
|
||||
$smarty->assign('single', true);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the delete ok command.
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function oncommdelok_2() {
|
||||
if(empty($_POST['select'])) {
|
||||
$s=-6;
|
||||
} else {
|
||||
$i=0;
|
||||
foreach($_POST['select'] as $commid=>$check) {
|
||||
$entry=substr($commid, 1, 18);
|
||||
$commid=substr($commid, 21, 20);
|
||||
$i+=comment_delete($entry, $commid) ? 1 : 0;
|
||||
}
|
||||
$s=$i>0 ? 6 : -6;
|
||||
}
|
||||
$this->smarty->assign('success', $s);
|
||||
$this->_redirect('manage', @$_POST['entry']);
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the cancel callback. It just makes the redirect.
|
||||
*
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function onccancel_2() {
|
||||
$this->_redirect('manage', @$_POST['entry']);
|
||||
return 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the action commspam.
|
||||
*
|
||||
* @param string $id: The comment id
|
||||
* @return integer: The redirect option
|
||||
*/
|
||||
function docommspam($id) {
|
||||
$smarty=&$this->smarty;
|
||||
$plugin=&$this->plugin;
|
||||
$entry=substr($id, 1, 18);
|
||||
$commid=substr($id, 21, 20);
|
||||
|
||||
if(!comment_exists($entry, $commid)) {
|
||||
$smarty->assign('success', -7);
|
||||
} else {
|
||||
$comment=comment_parse($entry, $commid);
|
||||
$clean=$plugin->akismetClean($comment, $entry);
|
||||
|
||||
$akismet=&$plugin->akismetLoad();
|
||||
if(is_object($akismet)) {
|
||||
$akismet->setComment($clean);
|
||||
$akismet->submitSpam();
|
||||
$smarty->assign('success', $akismet->errorsExist() ? -7 : 7);
|
||||
} else {
|
||||
$smarty->assign('success', -7);
|
||||
}
|
||||
}
|
||||
|
||||
$this->_redirect('manage', $entry);
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
admin_addpanelaction('entry', 'commentcenter', true);
|
388
fp-plugins/commentcenter/inc/akismet.class.php
Normal file
@ -0,0 +1,388 @@
|
||||
<?php
|
||||
/**
|
||||
* 08.11.2010 22:25:17est
|
||||
*
|
||||
* Akismet PHP4 class
|
||||
*
|
||||
* <b>Usage</b>
|
||||
* <code>
|
||||
* $comment = array(
|
||||
* 'author' => 'viagra-test-123',
|
||||
* 'email' => 'test@example.com',
|
||||
* 'website' => 'http://www.example.com/',
|
||||
* 'body' => 'This is a test comment',
|
||||
* 'permalink' => 'http://yourdomain.com/yourblogpost.url',
|
||||
* );
|
||||
*
|
||||
* $akismet = new Akismet('http://www.yourdomain.com/', 'YOUR_WORDPRESS_API_KEY', $comment);
|
||||
*
|
||||
* if($akismet->errorsExist()) {
|
||||
* echo"Couldn't connected to Akismet server!";
|
||||
* } else {
|
||||
* if($akismet->isSpam()) {
|
||||
* echo"Spam detected";
|
||||
* } else {
|
||||
* echo"yay, no spam!";
|
||||
* }
|
||||
* }
|
||||
* </code>
|
||||
*
|
||||
* @author Bret Kuhns {@link www.bretkuhns.com}
|
||||
* @link http://code.google.com/p/akismet-php4
|
||||
* @version 0.3.5
|
||||
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
|
||||
|
||||
// Error constants
|
||||
define("AKISMET_SERVER_NOT_FOUND", 0);
|
||||
define("AKISMET_RESPONSE_FAILED", 1);
|
||||
define("AKISMET_INVALID_KEY", 2);
|
||||
|
||||
|
||||
|
||||
// Base class to assist in error handling between Akismet classes
|
||||
class AkismetObject {
|
||||
var $errors = array();
|
||||
|
||||
|
||||
/**
|
||||
* Add a new error to the errors array in the object
|
||||
*
|
||||
* @param String $name A name (array key) for the error
|
||||
* @param String $string The error message
|
||||
* @return void
|
||||
*/
|
||||
// Set an error in the object
|
||||
function setError($name, $message) {
|
||||
$this->errors[$name] = $message;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return a specific error message from the errors array
|
||||
*
|
||||
* @param String $name The name of the error you want
|
||||
* @return mixed Returns a String if the error exists, a false boolean if it does not exist
|
||||
*/
|
||||
function getError($name) {
|
||||
if($this->isError($name)) {
|
||||
return $this->errors[$name];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return all errors in the object
|
||||
*
|
||||
* @return String[]
|
||||
*/
|
||||
function getErrors() {
|
||||
return (array)$this->errors;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if a certain error exists
|
||||
*
|
||||
* @param String $name The name of the error you want
|
||||
* @return boolean
|
||||
*/
|
||||
function isError($name) {
|
||||
return isset($this->errors[$name]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if any errors exist
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
function errorsExist() {
|
||||
return (count($this->errors) > 0);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Used by the Akismet class to communicate with the Akismet service
|
||||
class AkismetHttpClient extends AkismetObject {
|
||||
var $akismetVersion = '1.1';
|
||||
var $con;
|
||||
var $host;
|
||||
var $port;
|
||||
var $apiKey;
|
||||
var $blogUrl;
|
||||
var $errors = array();
|
||||
|
||||
|
||||
// Constructor
|
||||
function __construct($host, $blogUrl, $apiKey, $port = 80) {
|
||||
$this->host = $host;
|
||||
$this->port = $port;
|
||||
$this->blogUrl = $blogUrl;
|
||||
$this->apiKey = $apiKey;
|
||||
}
|
||||
|
||||
|
||||
// Use the connection active in $con to get a response from the server and return that response
|
||||
function getResponse($request, $path, $type = "post", $responseLength = 1160) {
|
||||
$this->_connect();
|
||||
|
||||
if($this->con && !$this->isError(AKISMET_SERVER_NOT_FOUND)) {
|
||||
$request =
|
||||
strToUpper($type)." /{$this->akismetVersion}/$path HTTP/1.0\r\n" .
|
||||
"Host: ".((!empty($this->apiKey)) ? $this->apiKey."." : null)."{$this->host}\r\n" .
|
||||
"Content-Type: application/x-www-form-urlencoded; charset=utf-8\r\n" .
|
||||
"Content-Length: ".strlen($request)."\r\n" .
|
||||
"User-Agent: Akismet PHP4 Class\r\n" .
|
||||
"\r\n" .
|
||||
$request
|
||||
;
|
||||
$response = "";
|
||||
|
||||
@fwrite($this->con, $request);
|
||||
|
||||
while(!feof($this->con)) {
|
||||
$response .= @fgets($this->con, $responseLength);
|
||||
}
|
||||
|
||||
$response = explode("\r\n\r\n", $response, 2);
|
||||
return $response[1];
|
||||
} else {
|
||||
$this->setError(AKISMET_RESPONSE_FAILED, "The response could not be retrieved.");
|
||||
}
|
||||
|
||||
$this->_disconnect();
|
||||
}
|
||||
|
||||
|
||||
// Connect to the Akismet server and store that connection in the instance variable $con
|
||||
function _connect() {
|
||||
if(!($this->con = @fsockopen($this->host, $this->port))) {
|
||||
$this->setError(AKISMET_SERVER_NOT_FOUND, "Could not connect to akismet server.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Close the connection to the Akismet server
|
||||
function _disconnect() {
|
||||
@fclose($this->con);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// The controlling class. This is the ONLY class the user should instantiate in
|
||||
// order to use the Akismet service!
|
||||
class Akismet extends AkismetObject {
|
||||
var $apiPort = 80;
|
||||
var $akismetServer = 'rest.akismet.com';
|
||||
var $akismetVersion = '1.1';
|
||||
var $http;
|
||||
|
||||
var $ignore = array(
|
||||
'HTTP_COOKIE',
|
||||
'HTTP_X_FORWARDED_FOR',
|
||||
'HTTP_X_FORWARDED_HOST',
|
||||
'HTTP_MAX_FORWARDS',
|
||||
'HTTP_X_FORWARDED_SERVER',
|
||||
'REDIRECT_STATUS',
|
||||
'SERVER_PORT',
|
||||
'PATH',
|
||||
'DOCUMENT_ROOT',
|
||||
'SERVER_ADMIN',
|
||||
'QUERY_STRING',
|
||||
'PHP_SELF',
|
||||
'argv'
|
||||
);
|
||||
|
||||
var $blogUrl = "";
|
||||
var $apiKey = "";
|
||||
var $comment = array();
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* Set instance variables, connect to Akismet, and check API key
|
||||
*
|
||||
* @param String $blogUrl The URL to your own blog
|
||||
* @param String $apiKey Your wordpress API key
|
||||
* @param String[] $comment A formatted comment array to be examined by the Akismet service
|
||||
* @return Akismet
|
||||
*/
|
||||
function __construct($blogUrl, $apiKey, $comment = array()) {
|
||||
$this->blogUrl = $blogUrl;
|
||||
$this->apiKey = $apiKey;
|
||||
$this->setComment($comment);
|
||||
|
||||
// Connect to the Akismet server and populate errors if they exist
|
||||
$this->http = new AkismetHttpClient($this->akismetServer, $blogUrl, $apiKey);
|
||||
if($this->http->errorsExist()) {
|
||||
$this->errors = array_merge($this->errors, $this->http->getErrors());
|
||||
}
|
||||
|
||||
// Check if the API key is valid
|
||||
if(!$this->_isValidApiKey($apiKey)) {
|
||||
$this->setError(AKISMET_INVALID_KEY, "Your Akismet API key is not valid.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Query the Akismet and determine if the comment is spam or not
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
function isSpam() {
|
||||
$response = $this->http->getResponse($this->_getQueryString(), 'comment-check');
|
||||
|
||||
return ($response == "true");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Submit this comment as an unchecked spam to the Akismet server
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function submitSpam() {
|
||||
$this->http->getResponse($this->_getQueryString(), 'submit-spam');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Submit a false-positive comment as "ham" to the Akismet server
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function submitHam() {
|
||||
$this->http->getResponse($this->_getQueryString(), 'submit-ham');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Manually set the comment value of the instantiated object.
|
||||
*
|
||||
* @param Array $comment
|
||||
* @return void
|
||||
*/
|
||||
function setComment($comment) {
|
||||
$this->comment = $comment;
|
||||
if(!empty($comment)) {
|
||||
$this->_formatCommentArray();
|
||||
$this->_fillCommentValues();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the current value of the object's comment array.
|
||||
*
|
||||
* @return Array
|
||||
*/
|
||||
function getComment() {
|
||||
return $this->comment;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check with the Akismet server to determine if the API key is valid
|
||||
*
|
||||
* @access Protected
|
||||
* @param String $key The Wordpress API key passed from the constructor argument
|
||||
* @return boolean
|
||||
*/
|
||||
function _isValidApiKey($key) {
|
||||
$keyCheck = $this->http->getResponse("key=".$this->apiKey."&blog=".$this->blogUrl, 'verify-key');
|
||||
|
||||
return ($keyCheck == "valid");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Format the comment array in accordance to the Akismet API
|
||||
*
|
||||
* @access Protected
|
||||
* @return void
|
||||
*/
|
||||
function _formatCommentArray() {
|
||||
$format = array(
|
||||
'type' => 'comment_type',
|
||||
'author' => 'comment_author',
|
||||
'email' => 'comment_author_email',
|
||||
'website' => 'comment_author_url',
|
||||
'body' => 'comment_content'
|
||||
);
|
||||
|
||||
foreach($format as $short => $long) {
|
||||
if(isset($this->comment[$short])) {
|
||||
$this->comment[$long] = $this->comment[$short];
|
||||
unset($this->comment[$short]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fill any values not provided by the developer with available values.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function _fillCommentValues() {
|
||||
if(!isset($this->comment['user_ip'])) {
|
||||
$this->comment['user_ip'] = ($_SERVER['REMOTE_ADDR'] != getenv('SERVER_ADDR')) ? $_SERVER['REMOTE_ADDR'] : getenv('HTTP_X_FORWARDED_FOR');
|
||||
}
|
||||
if(!isset($this->comment['user_agent'])) {
|
||||
$this->comment['user_agent'] = $_SERVER['HTTP_USER_AGENT'];
|
||||
}
|
||||
if(!isset($this->comment['referrer'])) {
|
||||
$this->comment['referrer'] = $_SERVER['HTTP_REFERER'];
|
||||
}
|
||||
if(!isset($this->comment['blog'])) {
|
||||
$this->comment['blog'] = $this->blogUrl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Build a query string for use with HTTP requests
|
||||
*
|
||||
* @access Protected
|
||||
* @return String
|
||||
*/
|
||||
function _getQueryString() {
|
||||
foreach($_SERVER as $key => $value) {
|
||||
if(!in_array($key, $this->ignore)) {
|
||||
if($key == 'REMOTE_ADDR') {
|
||||
$this->comment[$key] = $this->comment['user_ip'];
|
||||
} else {
|
||||
$this->comment[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$query_string = '';
|
||||
|
||||
foreach($this->comment as $key => $data) {
|
||||
$query_string .= $key . '=' . urlencode(stripslashes($data)) . '&';
|
||||
}
|
||||
|
||||
return $query_string;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
?>
|
44
fp-plugins/commentcenter/inc/editor.php
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
* This file integrates the plugin into the entry editor.
|
||||
*/
|
||||
|
||||
if(!class_exists('plugin_commentcenter')) {
|
||||
die('Don\'t try to hack us.');
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is called by the simple_edit_form hook to add
|
||||
* the Commentcenter options on the entry editor.
|
||||
*/
|
||||
function plugin_commentcenter_editor() {
|
||||
// Just on existent entries
|
||||
if(empty($_REQUEST['entry'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
global $smarty, $lang, $action;
|
||||
$entry=$_REQUEST['entry'];
|
||||
$plugin=&$GLOBALS['plugin_commentcenter'];
|
||||
$plang=&$lang['admin']['entry']['commentcenter'];
|
||||
$arr=$smarty->get_template_vars('post');
|
||||
$panel_url=$smarty->get_template_vars('panel_url');
|
||||
|
||||
$plugin->loadPolicies();
|
||||
$do=$plugin->behavoirFromPolicies($entry, @$arr['categories']);
|
||||
$do='simple_'.$do;
|
||||
|
||||
$oldact=$action;
|
||||
$action='commentcenter';
|
||||
$policies=admin_filter_action($panel_url, 'commentcenter');
|
||||
$manage=admin_filter_command($policies, 'manage', $entry);
|
||||
$action=$oldact;
|
||||
|
||||
echo "<fieldset id=\"commentcenter\">\n";
|
||||
echo "<legend>Comment Center</legend>\n<ul>\n<li>";
|
||||
echo "<a href=\"{$policies}\" title=\"{$plang['simple_edit']}\">";
|
||||
echo "{$plang['simple_pre']}{$plang[$do]}</a></li>\n";
|
||||
echo "<li><a href=\"{$manage}\">{$plang['simple_manage']}</a></li>\n";
|
||||
echo "\n</ul></fieldset>\n";
|
||||
}
|
||||
add_filter('simple_edit_form', 'plugin_commentcenter_editor');
|
33
fp-plugins/commentcenter/inc/jslang.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* This function prints some localized strings in javascript.
|
||||
* It's called by the init hook.
|
||||
*/
|
||||
function plugin_commentcenter_jslang() {
|
||||
if(empty($_GET['jslang'])) {
|
||||
return;
|
||||
}
|
||||
if($_GET['jslang']!='commentcenter') {
|
||||
return;
|
||||
}
|
||||
|
||||
global $lang;
|
||||
|
||||
header('Content-type: text/javascript');
|
||||
|
||||
echo "commentcenter_lang={\n";
|
||||
|
||||
foreach($lang['admin']['entry']['commentcenter']['msgs'] as $key=>$value) {
|
||||
$key=str_replace('-', '_', $key);
|
||||
$value=str_replace("\n", "\\n", $value);
|
||||
$value=str_replace("\r", "\\r", $value);
|
||||
$value=str_replace("\t", "\\t", $value);
|
||||
$value=str_replace('"', '\\"', $value);
|
||||
echo "\t'msg{$key}' : \"{$value}\",\n";
|
||||
}
|
||||
|
||||
echo '}';
|
||||
|
||||
die;
|
||||
}
|
||||
add_action('init', 'plugin_commentcenter_jslang');
|
187
fp-plugins/commentcenter/lang/lang.en-us.php
Normal file
@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
$lang['admin']['entry']['submenu']['commentcenter']='Comment Center';
|
||||
$lang['admin']['entry']['commentcenter']=array(
|
||||
# Header of the panel
|
||||
'title'=>'Comment Center',
|
||||
'desc1'=>'This panel allows you to manage the comments on your blog.',
|
||||
'desc2'=>'Here you can do several things:',
|
||||
|
||||
# Links
|
||||
'lpolicies'=>'Manage the policies',
|
||||
'lapprove'=>'Show blocked comments',
|
||||
'lmanage'=>'Manage comments',
|
||||
'lconfig'=>'Configure the plugin',
|
||||
|
||||
# Policies
|
||||
'policies'=>'Policies',
|
||||
'desc_pol'=>'Here you can edit the policies of comments.',
|
||||
'select'=>'Select',
|
||||
'criteria'=>'Criteria',
|
||||
'behavoir'=>'Behavoir',
|
||||
'options'=>'Options',
|
||||
'entry'=>'Entry',
|
||||
'entries'=>'Entries',
|
||||
'categories'=>'Categories',
|
||||
'nopolicies'=>'There isn\'t any policy.',
|
||||
'all_entries'=>'All Entries',
|
||||
'fol_entries'=>'The policy is applied to the following entries:',
|
||||
'fol_cats'=>'The policy is applied to entries in the following categories:',
|
||||
'older'=>'The policy is applied to entries older than %d day(s).',
|
||||
'allow'=>'Allow to comment',
|
||||
'block'=>'Block comments',
|
||||
'approvation'=>'Comments need to be approved',
|
||||
'up'=>'Move up',
|
||||
'down'=>'Move down',
|
||||
'edit'=>'Edit',
|
||||
'delete'=>'Delete',
|
||||
'newpol'=>'Add a new policy',
|
||||
'del_selected'=>'Delete selected policy(ies)',
|
||||
'select_all'=>'Select All',
|
||||
'deselect_all'=>'Deselect All',
|
||||
|
||||
# Configuration page
|
||||
'configure'=>'Configure the plugin',
|
||||
'desc_conf'=>'Here you can modify the options of the plugin.',
|
||||
'log_all'=>'Log blocked comments',
|
||||
'log_all_long'=>'Check it if you want to log also comments that are blocked.',
|
||||
'email_alert'=>'Notify comments via email',
|
||||
'email_alert_long'=>'Check it if you want that when there is a comment to approve you want to be '.
|
||||
'informed via email.',
|
||||
'akismet'=>'Akismet',
|
||||
'akismet_use'=>'Enable Akismet check',
|
||||
'akismet_key'=>'Akismet Key',
|
||||
'akismet_key_long'=>'The Akismet service provide you a key to use it. Insert here.',
|
||||
'akismet_url'=>'Blog base URL for Akismet',
|
||||
'akismet_url_long'=>'I think for Akismet free service you should use just a domain. '.
|
||||
'You can leave blank this field, <code>%s</code> will be used.',
|
||||
'save_conf'=>'Save Configuration',
|
||||
|
||||
# Edit policy page
|
||||
'apply_to'=>'Apply to',
|
||||
'editpol'=>'Edit a policy',
|
||||
'createpol'=>'Create a policy',
|
||||
'some_entries'=>'Some Entries',
|
||||
'properties'=>'Entry with certain properties',
|
||||
'se_desc'=>'If you selected the %s option, please insert entries you want to apply to this policy.',
|
||||
'se_fill'=>'Please fill the fields with the id of the entries (<code>entryYYMMDD-HHMMSS</code>).',
|
||||
'po_title'=>'Properties',
|
||||
'po_desc'=>'If you selected the %s option, please fill the properties.',
|
||||
'po_comp'=>'The fields aren\'t compulsory but you must fill at least one or the policy '.
|
||||
'will apply on all entries.',
|
||||
'po_time'=>'Time options',
|
||||
'po_older'=>'Apply to entries older than ',
|
||||
'days'=>'days.',
|
||||
'save_policy'=>'Save Policy',
|
||||
|
||||
# Delete policies page
|
||||
'del_policies'=>'Delete Policies',
|
||||
'del_descs'=>'You are going to delete this policy: ',
|
||||
'del_descm'=>'You are going to delete these policies: ',
|
||||
'sure'=>'Are you sure?',
|
||||
'del_subs'=>'Yes, please delete it',
|
||||
'del_subm'=>'Yes, please delete them',
|
||||
'del_cancel'=>'No, take me back to the panel',
|
||||
|
||||
# Approve comments page
|
||||
'app_title'=>'Approve comment',
|
||||
'app_desc'=>'Here you can approve comments.',
|
||||
'app_date'=>'Date',
|
||||
'app_content'=>'Comment',
|
||||
'app_author'=>'Author',
|
||||
'app_email'=>'Email',
|
||||
'app_ip'=>'IP',
|
||||
'app_actions'=>'Actions',
|
||||
'app_publish'=>'Publish',
|
||||
'app_delete'=>'Delete',
|
||||
'app_nocomms'=>'There isn\'t any comment.',
|
||||
'app_pselected'=>'Publish selected comment(s)',
|
||||
'app_dselected'=>'Remove selected comment(s)',
|
||||
'app_other'=>'Other Comments',
|
||||
'app_akismet'=>'Signed as spam',
|
||||
'app_spamdesc'=>'These comments were blocked by Akismet.',
|
||||
'app_hamsubmit'=>'Submit to Akismet as ham when you publish them.',
|
||||
'app_pubnotham'=>'Publish it but dont\'submit as ham',
|
||||
|
||||
# Delete comments page
|
||||
'delc_title'=>'Delete Comments',
|
||||
'delc_descs'=>'You are going to delete this comment: ',
|
||||
'delc_descm'=>'You are going to delete these comments: ',
|
||||
|
||||
# Manage comments page
|
||||
'man_searcht'=>'Search an entry',
|
||||
'man_searchd'=>'Insert the id of the entry whose you want to manage comments.',
|
||||
'man_search'=>'Search',
|
||||
'man_commfor'=>'Comments for %s',
|
||||
'man_spam'=>'Submit as spam to Akismet',
|
||||
|
||||
# The simple edit
|
||||
'simple_pre'=>'Comments for this entry will ',
|
||||
'simple_1'=>'be allowed.',
|
||||
'simple_0'=>'require your approval.',
|
||||
'simple_-1'=>'be blocked.',
|
||||
'simple_manage'=>'Manage the comments of this entry.',
|
||||
'simple_edit'=>'Edit Policies',
|
||||
|
||||
# Akismet warnings
|
||||
'akismet_errors'=>array(
|
||||
-1=>'The Akismet key is empty. Please insert it.',
|
||||
-2=>'We couldn\'t call Akismet servers.',
|
||||
-3=>'The Akismet response failed.',
|
||||
-4=>'The Akismet key is not valid.',
|
||||
),
|
||||
|
||||
# Messages
|
||||
'msgs'=>array(
|
||||
1=>'Configuration saved.',
|
||||
-1=>'An error occurred while trying to save the configuration.',
|
||||
|
||||
2=>'Policy saved.',
|
||||
-2=>'An error occurred while trying to save the policy (maybe your settings are wrong).',
|
||||
|
||||
3=>'Policy moved.',
|
||||
-3=>'An error occurred while trying to move the policy (or it can\'t be moved).',
|
||||
|
||||
4=>'Policy(ies) removed.',
|
||||
-4=>'An error occurred while trying to remove the policy(ies) (or you haven\'t selected any policy).',
|
||||
|
||||
5=>'Comment(s) published.',
|
||||
-5=>'An error occurred while trying to publish the comment(s).',
|
||||
|
||||
6=>'Comment(s) removed.',
|
||||
-6=>'An error occurred while trying to remove the comment(s) (or you haven\'t selected any comment).',
|
||||
|
||||
7=>'Comment submitted.',
|
||||
-7=>'An error occurred while trying to submit the comment.',
|
||||
),
|
||||
|
||||
# Errors
|
||||
'errors'=>array(
|
||||
'pol_nonex'=>'The policy you want to edit does not exist.',
|
||||
'entry_nf'=>'The entry you have selected does not exist.',
|
||||
),
|
||||
);
|
||||
$lang['plugin']['commentcenter']=array(
|
||||
'akismet_error'=>'Sorry, we\'re encountering technical difficulties.',
|
||||
'lock'=>'Comments for this entry are blocked, sorry.',
|
||||
'approvation'=>'The comments has been saved but the Administrator must approve it before showing it.',
|
||||
|
||||
# Mail for comments
|
||||
'mail_subj'=>'New comment to approve on %s',
|
||||
);
|
||||
|
||||
$lang['plugin']['commentcenter']['mail_text']=<<<MAIL
|
||||
Dear %toname%,
|
||||
|
||||
"%fromname%" %frommail% has just posted a comment to the entry entitled "%entrytitle%"
|
||||
but it need your approval before showing it.
|
||||
|
||||
Here is the comment that has just been posted:
|
||||
***************
|
||||
%content%
|
||||
***************
|
||||
|
||||
All the best,
|
||||
%blogtitle%
|
||||
|
||||
MAIL;
|
187
fp-plugins/commentcenter/lang/lang.it-it.php
Normal file
@ -0,0 +1,187 @@
|
||||
<?php
|
||||
|
||||
$lang['admin']['entry']['submenu']['commentcenter']='Comment Center';
|
||||
$lang['admin']['entry']['commentcenter']=array(
|
||||
# Header of the panel
|
||||
'title'=>'Comment Center',
|
||||
'desc1'=>'Questo pannello ti consente di gestire i commenti del tuo blog.',
|
||||
'desc2'=>'Qui puoi fare numerose cose:',
|
||||
|
||||
# Links
|
||||
'lpolicies'=>'Gestire le regole',
|
||||
'lapprove'=>'Elencare i commenti bloccati',
|
||||
'lmanage'=>'Gestire i commenti',
|
||||
'lconfig'=>'Configurare il plugin',
|
||||
|
||||
# Policies
|
||||
'policies'=>'Regole',
|
||||
'desc_pol'=>'Qui puoi modificare le regole sui commenti.',
|
||||
'select'=>'Seleziona',
|
||||
'criteria'=>'Criteri',
|
||||
'behavoir'=>'Comportamento',
|
||||
'options'=>'Opzioni',
|
||||
'entry'=>'Post',
|
||||
'entries'=>'Post',
|
||||
'categories'=>'Categorie',
|
||||
'nopolicies'=>'Non c\'è nessuna regola.',
|
||||
'all_entries'=>'Tutti i post',
|
||||
'fol_entries'=>'La regola è applicata ai seguenti post:',
|
||||
'fol_cats'=>'La regola è applicata ai post nelle seguenti categorie:',
|
||||
'older'=>'La regola è applicata ai post più vecchi di %d giorno/i.',
|
||||
'allow'=>'Permetti di commentare',
|
||||
'block'=>'Blocca i commenti',
|
||||
'approvation'=>'I commenti devono essere approvati',
|
||||
'up'=>'Sposta in su',
|
||||
'down'=>'Sposta in giù',
|
||||
'edit'=>'Modifica',
|
||||
'delete'=>'Elimina',
|
||||
'newpol'=>'Aggiungi una nuova regola',
|
||||
'del_selected'=>'Elimina le regole selezionate',
|
||||
'select_all'=>'Seleziona tutto',
|
||||
'deselect_all'=>'Deseleziona tutto',
|
||||
|
||||
# Configuration page
|
||||
'configure'=>'Configura il plugin',
|
||||
'desc_conf'=>'Qui puoi modificare le impostazioni del plugin.',
|
||||
'log_all'=>'Registra i commenti bloccati',
|
||||
'log_all_long'=>'Selezionala se vuoi registrare anche i commenti che sono bloccati.',
|
||||
'email_alert'=>'Notifica commenti via email',
|
||||
'email_alert_long'=>'Selezionala se vuoi essere informato via email quando c\'è un nuovo commento '.
|
||||
'da approvare.',
|
||||
'akismet'=>'Akismet',
|
||||
'akismet_use'=>'Abilita il controllo di Akismet',
|
||||
'akismet_key'=>'Chiave di Akismet',
|
||||
'akismet_key_long'=>'Per usare Akismet ti viene fornita una chiave. Inseriscila qui.',
|
||||
'akismet_url'=>'Indirizzo di base per Akismet',
|
||||
'akismet_url_long'=>'Penso che per il servizio gratuito di Akismet si possa usare un solo indirizzo. '.
|
||||
'Puoi anche lasciare vuoto questo campo, al suo posto si utilizzerà <code>%s</code>.',
|
||||
'save_conf'=>'Salva configurazione',
|
||||
|
||||
# Edit policy page
|
||||
'apply_to'=>'Applica a',
|
||||
'editpol'=>'Modifica una regola',
|
||||
'createpol'=>'Crea una regola',
|
||||
'some_entries'=>'Alcuni post',
|
||||
'properties'=>'Post con precise caratteristiche',
|
||||
'se_desc'=>'Se hai selezionato l\'opzione %s, per favore inserisci i post a cui la vuoi applicare.',
|
||||
'se_fill'=>'Per favore riempi i campi con gli id dei post (<code>entryYYMMDD-HHMMSS</code>).',
|
||||
'po_title'=>'Caratteristiche',
|
||||
'po_desc'=>'Se hai selezionato l\'opzione %s, per seleziona le caratteristiche.',
|
||||
'po_comp'=>'I campi non sono obbligatori ma ne devi selezionare almeno uno, altrimenti la regola '.
|
||||
'sarà applicata a tutti i post.',
|
||||
'po_time'=>'Opzioni sulle date',
|
||||
'po_older'=>'Applica ai post più vecchi di ',
|
||||
'days'=>'giorni.',
|
||||
'save_policy'=>'Salva regola',
|
||||
|
||||
# Delete policies page
|
||||
'del_policies'=>'Elimina regole',
|
||||
'del_descs'=>'Stai per eliminare la seguente regola: ',
|
||||
'del_descm'=>'Stai per eliminare la seguenti regoli: ',
|
||||
'sure'=>'Sei sicuro?',
|
||||
'del_subs'=>'Sì, continua l\'eliminazione',
|
||||
'del_subm'=>'Sì, continua l\'eliminazione',
|
||||
'del_cancel'=>'No, riportami al pannello',
|
||||
|
||||
# Approve comments page
|
||||
'app_title'=>'Approva commenti',
|
||||
'app_desc'=>'Qui puoi approvare i commenti.',
|
||||
'app_date'=>'Data',
|
||||
'app_content'=>'Commento',
|
||||
'app_author'=>'Autore',
|
||||
'app_email'=>'Email',
|
||||
'app_ip'=>'IP',
|
||||
'app_actions'=>'Azioni',
|
||||
'app_publish'=>'Pubblica',
|
||||
'app_delete'=>'Elimina',
|
||||
'app_nocomms'=>'Non c\'è nessun commento.',
|
||||
'app_pselected'=>'Pubblica i commenti selezionati',
|
||||
'app_dselected'=>'Elimina i commenti selezionati',
|
||||
'app_other'=>'Alti Commenti',
|
||||
'app_akismet'=>'Segnalati come spam',
|
||||
'app_spamdesc'=>'Questi commenti sono stati bloccati da Akismet.',
|
||||
'app_hamsubmit'=>'Inviali ad Akismet come ham quando li pubblichi.',
|
||||
'app_pubnotham'=>'Pubblica senza inviarlo come ham',
|
||||
|
||||
# Delete comments page
|
||||
'delc_title'=>'Elimina Commenti',
|
||||
'delc_descs'=>'Stai per eliminare questo commento: ',
|
||||
'delc_descm'=>'Stai per eliminare questi commenti: ',
|
||||
|
||||
# Manage comments page
|
||||
'man_searcht'=>'Cerca un post',
|
||||
'man_searchd'=>'Inserisci l\'id del post di cui vuoi gestire i commenti.',
|
||||
'man_search'=>'Cerca',
|
||||
'man_commfor'=>'Commenti di %s',
|
||||
'man_spam'=>'Segnala come spam ad Akismet',
|
||||
|
||||
# The simple edit
|
||||
'simple_pre'=>'In questo post i commenti ',
|
||||
'simple_1'=>'sono ammessi.',
|
||||
'simple_0'=>'richiedono la tua approvazione.',
|
||||
'simple_-1'=>'sono bloccati.',
|
||||
'simple_manage'=>'Gestisci i commenti di questo post.',
|
||||
'simple_edit'=>'Modifica le regole',
|
||||
|
||||
# Akismet warnings
|
||||
'akismet_errors'=>array(
|
||||
-1=>'La chiave di Akismet è vuota. Per favore inseriscila.',
|
||||
-2=>'Non abbiamo potuto chiamare i server di Akismet.',
|
||||
-3=>'La risposta di Akismet è fallita.',
|
||||
-4=>'La chiave di Akismet non è valida.',
|
||||
),
|
||||
|
||||
# Messages
|
||||
'msgs'=>array(
|
||||
1=>'Configurazione salvata.',
|
||||
-1=>'Si è verificato un errore durante il salvataggio della configurazione.',
|
||||
|
||||
2=>'Regola salvata.',
|
||||
-2=>'Si è verificato un errore durante il salvataggio della regola (forse le tue opzioni sono scorrette).',
|
||||
|
||||
3=>'Regola spostata.',
|
||||
-3=>'Si è verificato un errore nello spostamento della regola (o non la si può muovere).',
|
||||
|
||||
4=>'Regole rimosse.',
|
||||
-4=>'Si è verificato un errore durante la rimozione delle regole (o non hai selezionato nessuna regola).',
|
||||
|
||||
5=>'Commenti pubblicati.',
|
||||
-5=>'Si è verificato un errore durante la pubblicazione del commento.',
|
||||
|
||||
6=>'Commenti rimossi.',
|
||||
-6=>'Si è verificato un errore durante la rimozione dei commenti (o non hai selezionato nessun commento).',
|
||||
|
||||
7=>'Commento segnalato.',
|
||||
-7=>'Si è verificato un errore durante la segnalazione del commento.',
|
||||
),
|
||||
|
||||
# Errors
|
||||
'errors'=>array(
|
||||
'pol_nonex'=>'La regola che vuoi modificare non esiste.',
|
||||
'entry_nf'=>'Il post da te selezionato non esiste.',
|
||||
),
|
||||
);
|
||||
$lang['plugin']['commentcenter']=array(
|
||||
'akismet_error'=>'Akismet ha rilevato il tuo commento come SPAM.',
|
||||
'lock'=>'Siamo spiacenti ma i commenti per questo post sono chiusi.',
|
||||
'approvation'=>'Il commento è stato salvato ma l\'Amministratore lo deve approvare prima di farlo vedere.',
|
||||
|
||||
# Mail for comments
|
||||
'mail_subj'=>'Nuovo commento da approvare su %s',
|
||||
);
|
||||
|
||||
$lang['plugin']['commentcenter']['mail_text']=<<<MAIL
|
||||
Caro %toname%,
|
||||
|
||||
"%fromname%" %frommail% ha appena postato un commento nel post intitolato "%entrytitle%"
|
||||
ma tu devi approvarlo.
|
||||
|
||||
Questo è il suo contenuto:
|
||||
***************
|
||||
%content%
|
||||
***************
|
||||
|
||||
Cordiali saluti,
|
||||
%blogtitle%
|
||||
|
||||
MAIL;
|
444
fp-plugins/commentcenter/plugin.commentcenter.php
Normal file
@ -0,0 +1,444 @@
|
||||
<?php
|
||||
/*
|
||||
Plugin Name: Flatpress Comment Center
|
||||
Version: 1.1.1.azifix
|
||||
Plugin URI: http://www.vdfn.altervista.org/redirect/plugin_commentcenter.html
|
||||
Description: This plugin is a Comment Center for Flatpress
|
||||
Author: Piero VDFN
|
||||
Author URI: http://www.vdfn.altervista.org/
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class interacts with Flaptress comment system.
|
||||
*/
|
||||
class plugin_commentcenter {
|
||||
|
||||
# The plugin configuration
|
||||
var $conf=array();
|
||||
# The policies
|
||||
var $policies=array();
|
||||
# The plugin_dir
|
||||
var $pl_dir='fp-content/plugin_commentcenter/';
|
||||
|
||||
/**
|
||||
* This is the constructor.
|
||||
*/
|
||||
function __construct() {
|
||||
add_action('entry_block', array(&$this, 'lock'));
|
||||
add_filter('comment_validate', array(&$this, 'validate'), 5, 2);
|
||||
$this->pl_dir=FP_CONTENT.'plugin_commentcenter/';
|
||||
if(!file_exists($this->pl_dir)) {
|
||||
fs_mkdir($this->pl_dir);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function loads the configuration of the plugin.
|
||||
*
|
||||
* @param boolean $foce: Force to load it?
|
||||
* @return array: The configuration
|
||||
*/
|
||||
function getConf($force=false) {
|
||||
if(!empty($this->conf) && $force) {
|
||||
return $this->conf;
|
||||
}
|
||||
$this->conf=plugin_getoptions('commentcenter');
|
||||
return $this->conf;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function check if comment must be locked.
|
||||
*/
|
||||
function lock() {
|
||||
global $fp_params, $post, $smarty;
|
||||
$this->loadPolicies();
|
||||
$cats=is_array($post['categories']) ? $post['categories'] : array();
|
||||
$behavoir=$this->behavoirFromPolicies($fp_params['entry'], $cats);
|
||||
if($behavoir==-1 && !user_loggedin()) {
|
||||
$smarty->assign('entry_commslock', true);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function validates a comment.
|
||||
*
|
||||
* @param boolean $status: The current status of the comment validation
|
||||
* @param array $comment: The comment data
|
||||
* @return boolean: Is the comment valid?
|
||||
*/
|
||||
function validate($status, $comment) {
|
||||
global $smarty, $fp_params, $lang;
|
||||
# If the comment has been already stopped or this is the contact page, stop here our check
|
||||
if(!$status || function_exists('contact_display')) {
|
||||
return $status;
|
||||
}
|
||||
|
||||
# If the comment has been made from an administrator, don't check it
|
||||
if(@$comment['loggedin']) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$entry=$fp_params['entry'];
|
||||
if (!isset($comment['date'])) {
|
||||
$comment['date'] = date_time();
|
||||
}
|
||||
$comment['id']=bdb_idfromtime(BDB_COMMENT, $comment['date']);
|
||||
$conf=$this->getConf();
|
||||
|
||||
# This variables defines how the system has to behave.
|
||||
$behavoir=1;
|
||||
$this->loadPolicies();
|
||||
# To get categories of the entry, we use the same method of PrettyURLs...
|
||||
global $post;
|
||||
$behavoir=$this->behavoirFromPolicies($entry, $post['categories']);
|
||||
|
||||
// If comments are locked we don't send to Akismet
|
||||
if(@$conf['akismet_check'] && $behavoir!=-1) {
|
||||
$akismet=$this->akismetCheck($comment, $entry);
|
||||
if(!$akismet) {
|
||||
$smarty->append('error', $lang['plugin']['commentcenter']['akismet_error']);
|
||||
$this->logComment($comment, $entry, 'akismet');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if($behavoir==0) {
|
||||
$this->logComment($comment, $entry, 'confirm');
|
||||
$smarty->append('warnings', $lang['plugin']['commentcenter']['approvation']);
|
||||
if(@$conf['email_alert']) {
|
||||
$this->commentMail($comment, $post['subject']);
|
||||
}
|
||||
} elseif($behavoir==-1 && @$conf['log_all']) {
|
||||
$this->logComment($comment, $entry, 'denided');
|
||||
$smarty->append('error', $lang['plugin']['commentcenter']['lock']);
|
||||
}
|
||||
|
||||
if($behavoir!=1) {
|
||||
// Delete the comment content
|
||||
$_POST['content']='';
|
||||
}
|
||||
|
||||
# Also if the comment need to be approved, we return false.
|
||||
return $behavoir==1;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function create an akismet instance.
|
||||
* An Akismet object is returned by reference. But if an error
|
||||
* happens, the function return a negative integer:
|
||||
* -1 if we can't find the key
|
||||
* -2 if we can't contact Akismet servers
|
||||
* -3 if the response failed
|
||||
* -4 if the key isn't valid
|
||||
*
|
||||
* @param string $key: A key for the service
|
||||
* @return object: The akismet object
|
||||
*/
|
||||
function &akismetLoad($key='') {
|
||||
$conf=$this->getConf();
|
||||
|
||||
if(!empty($key)) {
|
||||
} elseif(empty($conf['akismet_key'])) {
|
||||
$e=-1;
|
||||
return $e;
|
||||
} else {
|
||||
$key=$conf['akismet_key'];
|
||||
}
|
||||
$url=empty($conf['akismet_url']) ? BLOG_BASEURL : $conf['akismet_url'];
|
||||
|
||||
include_once dirname(__FILE__).'/inc/akismet.class.php';
|
||||
$akismet=new Akismet($url, $key);
|
||||
|
||||
if($akismet->errorsExist()) {
|
||||
$e=0;
|
||||
switch(true) {
|
||||
case $akismet->isError(AKISMET_SERVER_NOT_FOUND):
|
||||
$e=-2;
|
||||
break;
|
||||
case $akismet->isError(AKISMET_RESPONSE_FAILED):
|
||||
$e=-3;
|
||||
break;
|
||||
case $akismet->isError(AKISMET_INVALID_KEY):
|
||||
$e=-4;
|
||||
break;
|
||||
}
|
||||
return $e;
|
||||
} else {
|
||||
return $akismet;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function clean a comment to send it to Akismet.
|
||||
*
|
||||
* @param array $comment: The comment data
|
||||
* @param string $entry: The entry id
|
||||
* @return array: $comment cleaned
|
||||
*/
|
||||
function akismetClean($comment, $entry) {
|
||||
global $post;
|
||||
$conf=$this->getConf();
|
||||
|
||||
$oldpost=$post;
|
||||
$o=new FPDB_Query("id:{$entry},fullparse:false", null);
|
||||
$arr=$o->getEntry();
|
||||
$post=$arr[1];
|
||||
$link=get_permalink($entry);
|
||||
if(!empty($conf['akismet_url'])) {
|
||||
$link=$conf['akismet_url'].substr($link, strlen(BLOG_BASEURL));
|
||||
}
|
||||
|
||||
$post=$oldpost;
|
||||
|
||||
$clean=array(
|
||||
'author'=>$comment['name'],
|
||||
'email'=>@$comment['email'],
|
||||
'website'=>@$comment['url'],
|
||||
'body'=>$comment['content'],
|
||||
'user_ip'=>@$comment['ip-address'],
|
||||
'permalink'=>$link
|
||||
);
|
||||
|
||||
return $clean;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function manages the Akismet Check
|
||||
*
|
||||
* @param array $comment: The comment data
|
||||
* @param string $entry: The entry id
|
||||
* @return boolean: Is the comment allowed?
|
||||
*/
|
||||
function akismetCheck($comment, $entry) {
|
||||
$akismet=&$this->akismetLoad();
|
||||
if(!is_object($akismet)) {
|
||||
# Failed to load it. We return true, but the comment isn't checked
|
||||
// TODO: Add an error logger? Or make different, configurable behaves?
|
||||
return true;
|
||||
}
|
||||
|
||||
$clean=$this->akismetClean($comment, $entry);
|
||||
$akismet->setComment($clean);
|
||||
if($akismet->isSpam()) {
|
||||
# Akismet sign the comment as spam. Let's stop it.
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This function loads the comment policies.
|
||||
*
|
||||
* @param boolean $force: Force to load them?
|
||||
* @return array: The policies
|
||||
*/
|
||||
function &loadPolicies($force=false) {
|
||||
if(!$force && !empty($this->policies)) {
|
||||
return $this->policies;
|
||||
}
|
||||
|
||||
if(!file_exists($f=$this->pl_dir.'policies.txt')) {
|
||||
$this->policies=array();
|
||||
return $this->policies;
|
||||
}
|
||||
|
||||
include $f;
|
||||
$this->policies=$policies;
|
||||
return $this->policies;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function saves the policies.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
function savePolicies() {
|
||||
$this->policies=array_values($this->policies);
|
||||
return system_save($this->pl_dir.'policies.txt', array('policies'=>$this->policies));
|
||||
}
|
||||
|
||||
/**
|
||||
* This function adds a policy in a certain position.
|
||||
*
|
||||
* @param mixed $policy: The policy
|
||||
* @param integer $position: The position
|
||||
*/
|
||||
function addPolicyAt($policy, $position) {
|
||||
if($position<0) {
|
||||
$position=count($this->policies)+$position+1;
|
||||
}
|
||||
$before=array_slice($this->policies, 0, $position);
|
||||
$after=array_slice($this->policies, $position);
|
||||
$this->policies=array_merge($before, array($policy), $after);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function moves a policy from a postition to another one.
|
||||
*
|
||||
* @param integer $old: The old position
|
||||
* @param integer $new: The new position
|
||||
*/
|
||||
function policyMove($old, $new) {
|
||||
if(!isset($this->policies[$old])) {
|
||||
return false;
|
||||
}
|
||||
$new=$new>$old ? $new+1 : $new;
|
||||
$del=$new>$old ? $old : $old+1;
|
||||
$this->addPolicyAt($this->policies[$old], $new);
|
||||
if(isset($this->policies[$del])) {
|
||||
unset($this->policies[$del]);
|
||||
}
|
||||
$this->policies=array_values($this->policies);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get behavoir from policies.
|
||||
* 1: The user can comment
|
||||
* 0: The comment need to be approved
|
||||
* -1: The user can't comment
|
||||
*
|
||||
* @param string $entry: The entry id
|
||||
* @param array $cats: The categories
|
||||
* @return integer: The behavoir
|
||||
*/
|
||||
function behavoirFromPolicies($entry, $cats=array()) {
|
||||
$date=date_from_id($entry);
|
||||
$time=$date['time'];
|
||||
$return=1;
|
||||
$pols=&$this->policies;
|
||||
|
||||
if(count($pols)) {
|
||||
foreach($pols as $policy) {
|
||||
if(@$policy['is_all']) {
|
||||
$return=$policy['do'];
|
||||
} elseif(!empty($policy['entry']) && is_array($policy['entry'])) {
|
||||
if(in_array($entry, $policy['entry'])) {
|
||||
$return=$policy['do'];
|
||||
}
|
||||
} elseif(!empty($policy['entry'])) {
|
||||
if($entry==$policy['entry']) {
|
||||
$return=$policy['do'];
|
||||
}
|
||||
} else {
|
||||
$consider=true;
|
||||
if(!empty($policy['categories'])) {
|
||||
$consider=count(array_intersect($policy['categories'], $cats))>0;
|
||||
}
|
||||
if(!empty($policy['older'])) {
|
||||
$consider=(time()-$time)>$policy['older'];
|
||||
} else {
|
||||
if(!empty($policy['time_less'])) {
|
||||
$consider=$time>$policy['time_less'];
|
||||
}
|
||||
if(!empty($policy['time_more'])) {
|
||||
$consider=$time<$policy['time_more'];
|
||||
}
|
||||
}
|
||||
$return=$consider ? $policy['do'] : $return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function saves a comment into the plugin directory.
|
||||
* Maybe it's considered SPAM by Akismet or the comment requires
|
||||
* the Administrator's approvation.
|
||||
*
|
||||
* @param array $comment: The comment data
|
||||
* @param string $entry: The entry id
|
||||
* @param string $why: The reason of the log
|
||||
* @return boolean: Can it saves the log?
|
||||
*/
|
||||
function logComment($comment, $entry, $why='') {
|
||||
$f=$this->pl_dir."e{$entry}_c{$comment['id']}.txt";
|
||||
if(!empty($why)) {
|
||||
$comment['log_reason']=$why;
|
||||
}
|
||||
return system_save($f, array('comment'=>$comment));
|
||||
}
|
||||
|
||||
/**
|
||||
* This function send an email to the administrator with the comment data.
|
||||
* It's based on the code of comment.php
|
||||
*
|
||||
* @param array $comment: The comment data
|
||||
* @param string $entry_title: The title of the entry
|
||||
* @return boolean
|
||||
*/
|
||||
function commentMail($comment, $entry_title) {
|
||||
global $lang, $fp_config;
|
||||
|
||||
$subject=$lang['plugin']['commentcenter']['mail_subj'];
|
||||
$subject=sprintf($subject, $fp_config['general']['title']);
|
||||
|
||||
$comm_mail=empty($comment['email'])? '' : "<{$comment['email']}>";
|
||||
$from_mail=$fp_config['general']['email'];
|
||||
|
||||
$text=$lang['plugin']['commentcenter']['mail_text'];
|
||||
$text=str_replace(array('%toname%', '%fromname%', '%frommail%',
|
||||
'%entrytitle%', '%content%', '%blogtitle%'
|
||||
), array($fp_config['general']['author'], $comment['name'], $comm_mail,
|
||||
$entry_title, $comment['content'], $fp_config['general']['title']
|
||||
), $text
|
||||
);
|
||||
|
||||
return @utils_mail($from_mail, $subject, $text);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$GLOBALS['plugin_commentcenter']=new plugin_commentcenter();
|
||||
|
||||
/**
|
||||
* This class makes the list of comments that needs to be approved.
|
||||
*/
|
||||
class commentcenter_list extends fs_filelister {
|
||||
/**
|
||||
* This is the constructor of the class.
|
||||
*
|
||||
* @params string $dir: The directory to list
|
||||
*/
|
||||
function commentcenter_list($dir) {
|
||||
parent::__construct($dir);
|
||||
}
|
||||
|
||||
function _checkFile($directory, $file) {
|
||||
if(fnmatch('eentry*.txt', $file)) {
|
||||
$entry=substr($file, 1, 18);
|
||||
$comment=substr($file, 21, 20);
|
||||
$this->_list[$entry][]=$comment;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
function toDetails($entry=null) {
|
||||
$list=array();
|
||||
if(!is_null($entry) && @is_array($this->_list[$entry])) {
|
||||
foreach($this->_list[$entry] as $commentid) {
|
||||
include $this->_directory."/e{$entry}_c{$commentid}.txt";
|
||||
if(empty($comment['log_reason'])) {
|
||||
$comment['log_reason']='nd';
|
||||
}
|
||||
$list[$comment['log_reason']][$commentid]=$comment;
|
||||
}
|
||||
} else {
|
||||
foreach($this->_list as $key=>$comments) {
|
||||
$list[$key]=$this->toDetails($key);
|
||||
}
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
|
||||
# If we're in administration area, we load admin panel
|
||||
if(defined('MOD_ADMIN_PANEL')) {
|
||||
include dirname(__FILE__).'/inc/admin.php';
|
||||
include dirname(__FILE__).'/inc/jslang.php';
|
||||
include dirname(__FILE__).'/inc/editor.php';
|
||||
}
|
174
fp-plugins/commentcenter/res/ajax.js
Normal file
@ -0,0 +1,174 @@
|
||||
/**
|
||||
* This function adds an error or a success to Flatpress standard place.
|
||||
*/
|
||||
function fpNotify(msg, type) {
|
||||
$('#errorlist').hide().html('<ul class="msgs '+type+"\">\n<li>"+msg+"</li>\n</ul>").fadeIn('slow');
|
||||
window.setTimeout(fpRemoveNotifies, 3000);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function removes the FP Notifies
|
||||
*/
|
||||
function fpRemoveNotifies() {
|
||||
$('#errorlist ul[class!="msgs warnings"]').fadeOut('slow');
|
||||
}
|
||||
|
||||
/**
|
||||
* This function moves a policy.
|
||||
*
|
||||
* @param integer id: The policy id
|
||||
* @param integer how: The size of the movement
|
||||
*/
|
||||
function movePolicy(id, how) {
|
||||
tarid=parseInt(id)+parseInt(how);
|
||||
original='tr_policy'+id;
|
||||
target='tr_policy'+tarid;
|
||||
tmp='tmp'+target;
|
||||
|
||||
if(how<0) {
|
||||
$('.'+original).insertBefore('.'+target);
|
||||
} else if(how>0) {
|
||||
$('.'+original).insertAfter('.'+target);
|
||||
}
|
||||
|
||||
$('.'+original).removeClass(original).addClass(tmp);
|
||||
$('.'+target).removeClass(target).addClass(original).attr('href');
|
||||
$('.'+tmp).removeClass(tmp).addClass(target)
|
||||
$('.'+target+' td').animate({'background-color' : '#78ba91'}, {
|
||||
'complete' : function() {
|
||||
$(this).attr('style', '');
|
||||
}
|
||||
});
|
||||
|
||||
oruh=$('a[rel=polup\\['+id+'\\]]').attr('rel', 'tmpup').attr('href');
|
||||
ordh=$('a[rel=poldown\\['+id+'\\]]').attr('rel', 'tmpdown').attr('href');
|
||||
tauh=$('a[rel=polup\\['+tarid+'\\]]').attr('rel', 'polup['+id+']').attr('href');
|
||||
tadh=$('a[rel=poldown\\['+tarid+'\\]]').attr('rel', 'poldown['+id+']').attr('href');
|
||||
$('a[rel=polup\\['+id+'\\]]').attr('href', oruh);
|
||||
$('a[rel=poldown\\['+id+'\\]]').attr('href', ordh);
|
||||
$('a[rel=tmpup]').attr('rel', 'polup['+tarid+']').attr('href', tauh);
|
||||
$('a[rel=tmpdown]').attr('rel', 'poldown['+tarid+']').attr('href', tadh);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is called on the click event to move up/down with AJAX the policies.
|
||||
*/
|
||||
function clickPolicy() {
|
||||
rel=$(this).attr('rel');
|
||||
start_id=rel.indexOf('[');
|
||||
end_id=rel.indexOf(']');
|
||||
id=rel.substr(start_id+1, end_id-start_id-1);
|
||||
dir=rel.substr(3, start_id-3);
|
||||
how=dir=='up' ? -1 : 1;
|
||||
url=$(this).attr('href')+'&mod=ajax';
|
||||
succ=0;
|
||||
$.ajax({
|
||||
'url' : url,
|
||||
'success' : function(data) {
|
||||
succ=1;
|
||||
if(data==3) {
|
||||
fpNotify(commentcenter_lang.msg3, 'notifications');
|
||||
movePolicy(id, how);
|
||||
} else if(data==-3) {
|
||||
fpNotify(commentcenter_lang.msg_3, 'errors');
|
||||
} else {
|
||||
fpNotify(data, 'errors');
|
||||
}
|
||||
}
|
||||
});
|
||||
return succ==1;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is the callback for the event click to select all checkbox
|
||||
*/
|
||||
function checkboxa() {
|
||||
rel=$(this).attr('rel');
|
||||
tdbegin=rel.indexOf('[');
|
||||
tdend=rel.indexOf(']');
|
||||
td=rel.substr(tdbegin+1, tdend-tdbegin-1);
|
||||
check=rel.substr(0, tdbegin)=='selectAll';
|
||||
$('.'+td+' input[type=checkbox]').attr('checked', check);
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function checks for the radio buttons in the edit policy page.
|
||||
*/
|
||||
function radioEdit() {
|
||||
if($('#fill_entries').length<1) {
|
||||
return;
|
||||
}
|
||||
|
||||
reDone=false;
|
||||
|
||||
$('input[type=radio]').click(radioClick).each(function() {
|
||||
if($(this).attr('checked')) {
|
||||
reDone=true;
|
||||
$(this).click();
|
||||
}
|
||||
});
|
||||
|
||||
if(!reDone) {
|
||||
$('input[value=all_entries]').click().attr('checked', false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is the callback for the event click on radio buttons.
|
||||
*/
|
||||
function radioClick() {
|
||||
val=$(this).attr('value');
|
||||
entries='#fill_entries';
|
||||
prop='#fill_properties';
|
||||
|
||||
if(val=='some_entries') {
|
||||
show=entries;
|
||||
hide=prop;
|
||||
} else if(val=='properties') {
|
||||
show=prop;
|
||||
hide=entries;
|
||||
} else {
|
||||
$(entries).hide();
|
||||
$(prop).hide();
|
||||
return true;
|
||||
}
|
||||
|
||||
$(show).show();
|
||||
$(hide).hide();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* This function shows/hides the Akismet options at the startup.
|
||||
*/
|
||||
function akismetOptionsReady() {
|
||||
if($('label[for=akismet_check]').length<1) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('input[name=akismet_check]').click(akismetOptionsReady);
|
||||
|
||||
status=$('input[name=akismet_check]').attr('checked');
|
||||
|
||||
el=$('.akismet_opts');
|
||||
|
||||
if(status) {
|
||||
el.show();
|
||||
} else {
|
||||
el.hide();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
window.setTimeout(fpRemoveNotifies, 3000);
|
||||
$('a[rel*="polup"]').click(clickPolicy);
|
||||
$('a[rel*="poldown"]').click(clickPolicy);
|
||||
|
||||
$('.commentcenter_select').css('display', 'block').find('a').click(checkboxa);
|
||||
|
||||
radioEdit();
|
||||
akismetOptionsReady();
|
||||
});
|
24
fp-plugins/commentcenter/tpls/approvelist.tpl
Normal file
@ -0,0 +1,24 @@
|
||||
{include file=plugin:commentcenter/header}
|
||||
{html_form}
|
||||
<h2>{$plang.app_title}</h2>
|
||||
<p>{$plang.app_desc}</p>
|
||||
{assign var="fetch" value="confirm"}
|
||||
{include file=plugin:commentcenter/listcomments}
|
||||
{if $use_akismet}
|
||||
<h3>{$plang.app_akismet}</h3>
|
||||
<p>{$plang.app_spamdesc}</p>
|
||||
{assign var="fetch" value="akismet"}
|
||||
{include file=plugin:commentcenter/listcomments}
|
||||
<p><input type="checkbox" name="submitham" id="submitham" checked="checked" />
|
||||
<label for="submitham">{$plang.app_hamsubmit}</label></p>
|
||||
{/if}
|
||||
{if $other}
|
||||
<h3>{$plang.app_other}</h3>
|
||||
{assign var="fetch" value="denided"}
|
||||
{include file=plugin:commentcenter/listcomments}
|
||||
{/if}
|
||||
<div class="buttonbar">
|
||||
{html_submit name="mpubcomm" id="mpubcomm" value=$plang.app_pselected}
|
||||
{html_submit name="mdelcomm" id="mdelcomm" value=$plang.app_dselected}
|
||||
</div>
|
||||
{/html_form}
|
42
fp-plugins/commentcenter/tpls/configure.tpl
Normal file
@ -0,0 +1,42 @@
|
||||
{include file=plugin:commentcenter/header}
|
||||
{html_form}
|
||||
<h2>{$plang.configure}</h2>
|
||||
<p>{$plang.desc_conf}</p>
|
||||
|
||||
<dl class="option-set">
|
||||
<dt><label for="log_all">{$plang.log_all}</label></dt>
|
||||
<dd>
|
||||
<input type="checkbox" name="log_all" id="log_all"{if $pl_conf.log_all} checked="checked"{/if} /><br />
|
||||
{$plang.log_all_long}
|
||||
</dd>
|
||||
|
||||
<dt><label for="email_alert">{$plang.email_alert}</label></dt>
|
||||
<dd>
|
||||
<input type="checkbox" name="email_alert" id="email_alert"{if $pl_conf.email_alert} checked="checked"{/if} /><br />
|
||||
{$plang.email_alert_long}
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2>{$plang.akismet}</h2>
|
||||
<dl class="option-set">
|
||||
<dt><label for="akismet_check">{$plang.akismet_use}</label></dt>
|
||||
<dd>
|
||||
<input type="checkbox" name="akismet_check" id="akismet_check"{if $pl_conf.akismet_check} checked="checked"{/if} />
|
||||
</dd>
|
||||
<dt class="akismet_opts"><label for="akismet_key">{$plang.akismet_key}</label></dt>
|
||||
<dd class="akismet_opts">
|
||||
<input type="text" name="akismet_key" id="akismet_key" value="{$pl_conf.akismet_key}" /><br />
|
||||
{$plang.akismet_key_long}
|
||||
</dd>
|
||||
<dt class="akismet_opts"><label for="akismet_url">{$plang.akismet_url}</label></dt>
|
||||
<dd class="akismet_opts">
|
||||
<input type="text" name="akismet_url" id="akismet_url" value="{$pl_conf.akismet_url}" /><br />
|
||||
{$plang.akismet_url_long|sprintf:$smarty.const.BLOG_BASEURL}
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<div class="buttonbar">
|
||||
{html_submit name="configure" id="configure" value=$plang.save_conf}
|
||||
</div>
|
||||
|
||||
{/html_form}
|
23
fp-plugins/commentcenter/tpls/deletecomm.tpl
Normal file
@ -0,0 +1,23 @@
|
||||
{include file=plugin:commentcenter/header}
|
||||
<h2>{$plang.delc_title}</h2>
|
||||
<p>{if $single}{$plang.delc_descs}{else}{$plang.delc_descm}{/if}</p>
|
||||
{html_form}
|
||||
{assign var="delete" value=true}
|
||||
{assign var="fetch" value="del"}
|
||||
{include file=plugin:commentcenter/listcomments}
|
||||
<p>{$plang.sure}</p>
|
||||
<div class="buttonbar">
|
||||
{if $is_managing}
|
||||
<input type="hidden" name="entry" value="{$entry}" />
|
||||
{assign var="button_suff" value="_2"}
|
||||
{else}
|
||||
{assign var="button_suff" value=""}
|
||||
{/if}
|
||||
{if $single}
|
||||
{html_submit name="commdelok$button_suff" id="commdelok$button_suff" value=$plang.del_subs}
|
||||
{else}
|
||||
{html_submit name="commdelok$button_suff" id="commdelok$button_suff" value=$plang.del_subm}
|
||||
{/if}
|
||||
{html_submit name="ccancel$button_suff" id="ccancel$button_suff" value=$plang.del_cancel}
|
||||
</div>
|
||||
{/html_form}
|
16
fp-plugins/commentcenter/tpls/deletepol.tpl
Normal file
@ -0,0 +1,16 @@
|
||||
{include file=plugin:commentcenter/header}
|
||||
<h2>{$plang.del_policies}</h2>
|
||||
<p>{if $single}{$plang.del_descs}{else}{$plang.del_descm}{/if}</p>
|
||||
{html_form}
|
||||
{assign var="delete" value=true}
|
||||
{include file=plugin:commentcenter/listpolicies}
|
||||
<p>{$plang.sure}</p>
|
||||
<div class="buttonbar">
|
||||
{if $single}
|
||||
{html_submit name="delok" id="delok" value=$plang.del_subs}
|
||||
{else}
|
||||
{html_submit name="delok" id="delok" value=$plang.del_subm}
|
||||
{/if}
|
||||
{html_submit name="cancel" id="cancel" value=$plang.del_cancel}
|
||||
</div>
|
||||
{/html_form}
|
72
fp-plugins/commentcenter/tpls/editpol.tpl
Normal file
@ -0,0 +1,72 @@
|
||||
{include file=plugin:commentcenter/header}
|
||||
{html_form}
|
||||
<h2>{if $polnew}{$plang.newpol}{else}{$plang.editpol}{/if}</h2>
|
||||
<dl class="option-set">
|
||||
<dt>{$plang.apply_to}</dt>
|
||||
<dd>
|
||||
<input type="radio" name="apply_to" id="all_entries" value="all_entries"{if $policy.is_all} checked="checked"{/if} />
|
||||
<label for="all_entries">{$plang.all_entries}</label><br />
|
||||
<input type="radio" name="apply_to" id="some_entries" value="some_entries"{if !empty($policy.entry)} checked="checked"{/if} />
|
||||
<label for="some_entries">{$plang.some_entries}</label><br />
|
||||
<input type="radio" name="apply_to" id="properties" value="properties"{if !$polnew && !$policy.is_all & empty($policy.entry)} checked="checked"{/if} />
|
||||
<label for="properties">{$plang.properties}</label><br />
|
||||
</dd>
|
||||
<dt><label for="behavoir">{$plang.behavoir}</label></dt>
|
||||
<dd>
|
||||
<select name="behavoir" id="behavoir">
|
||||
<option value="1"{if $policy.do==1} selected="selected"{/if}>{$plang.allow}</option>
|
||||
<option value="0"{if $policy.do==0 && !$polnew} selected="selected"{/if}>{$plang.approvation}</option>
|
||||
<option value="-1"{if $policy.do==-1} selected="selected"{/if}>{$plang.block}</option>
|
||||
</select>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<!-- Maybe here I could add a JS to hide the unused sections -->
|
||||
<div id="fill_entries">
|
||||
<h3>{$plang.entries}</h3>
|
||||
<p>{$plang.se_desc|sprintf:"<i>`$plang.some_entries`</i>"}</p>
|
||||
<p>{$plang.se_fill}</p>
|
||||
|
||||
{if !empty($policy.entry) && !is_array($policy.entry)}
|
||||
{assign var="parity" value=1}
|
||||
<input type="text" name="entries[]" value="{$policy.entry|wp_specialchars}" />
|
||||
{elseif !empty($policy.entry)}
|
||||
{foreach name=entries_foreach from=$policy.entry item=entry}
|
||||
<input type="text" name="entries[]" value="{$entry|wp_specialchars}" /> {if ($smarty.foreach.entries_foreach.iteration % 2)==0}<br />{/if}
|
||||
{if ($smarty.foreach.entries_foreach.iteration % 2)==1 && $smarty.foreach.entries_foreach.last}{assign var="parity" value=1}{/if}
|
||||
{/foreach}
|
||||
{/if}
|
||||
{if $parity==1} <input type="text" name="entries[]" value="" /><br />{/if}
|
||||
|
||||
<input type="text" name="entries[]" value="" />
|
||||
<input type="text" name="entries[]" value="" /><br />
|
||||
<input type="text" name="entries[]" value="" />
|
||||
<input type="text" name="entries[]" value="" /><br />
|
||||
</div>
|
||||
|
||||
<div id="fill_properties" class="option-set">
|
||||
<h3>{$plang.po_title}</h3>
|
||||
<p>{$plang.po_desc|sprintf:"<i>`$plang.properties`</i>"}</p>
|
||||
<p>{$plang.po_comp}</p>
|
||||
|
||||
<!-- That isn't the real id but... -->
|
||||
<fieldset id="admin-entry-categories">
|
||||
<legend>{$plang.categories}</legend>
|
||||
{list_categories type=form selected=$policy.categories}
|
||||
</fieldset>
|
||||
|
||||
<fieldset>
|
||||
<legend>{$plang.po_time}</legend>
|
||||
<p><label for="older">{$plang.po_older}</label>
|
||||
<input type="text" name="older" id="older" value="{if !empty($policy.older)}{$policy.older/86400}{/if}" class="smalltextinput" />
|
||||
{$plang.days}</p>
|
||||
<!-- TODO: add the option for timestamp -->
|
||||
</fiedlset>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="buttonbar">
|
||||
<input type="hidden" name="policy_id" value="{$pol_id}" />
|
||||
{html_submit name="edit_policy" id="edit_policy" value=$plang.save_policy}
|
||||
</div>
|
||||
{/html_form}
|
13
fp-plugins/commentcenter/tpls/header.tpl
Normal file
@ -0,0 +1,13 @@
|
||||
<h2>{$plang.title}</h2>
|
||||
<p>{$plang.desc1}</p>
|
||||
<p>{$plang.desc2}</p>
|
||||
<ul>
|
||||
<li><a href="{$panel_url|action_link:commentcenter}" title="{$plang.lpolicies}">{$plang.lpolicies}</a></li>
|
||||
<li><a href="{$action_url|cmd_link:approve_list:1}" title="{$plang.lapprove}">{$plang.lapprove}</a></li>
|
||||
<li><a href="{$action_url|cmd_link:manage:'search'}" title="{$plang.lmanage}">{$plang.lmanage}</a></li>
|
||||
<li><a href="{$action_url|cmd_link:configure:1}" title="{$plang.lconfig}">{$plang.lconfig}</a></li>
|
||||
</ul>
|
||||
|
||||
{include file='shared:errorlist.tpl'}
|
||||
|
||||
|
59
fp-plugins/commentcenter/tpls/listcomments.tpl
Normal file
@ -0,0 +1,59 @@
|
||||
<table class="entrylist">
|
||||
<thead><tr>
|
||||
{if !$delete}<th></th>{/if}
|
||||
<th>{$plang.app_date}</th>
|
||||
<th>{$plang.app_content}</th>
|
||||
<th>{$plang.app_author}</th>
|
||||
<th>{$plang.app_email}</th>
|
||||
<th>{$plang.app_ip}</th>
|
||||
{if !$delete}<th>{$plang.app_actions}</th>{/if}
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
{assign var="i" value=0}
|
||||
{foreach from=$entries key=entryid item=entry}
|
||||
{if count($entry.$fetch)>0 && !$is_managing}<tr><td colspan="{if $delete}5{else}7{/if}">{$entryid|idToSubject} ({$entryid})</td></tr>
|
||||
{/if}
|
||||
{foreach from=$entry.$fetch item=comm key=comm_id}
|
||||
{assign var="i" value=$i+1}
|
||||
<tr>
|
||||
{if !$delete}<td class="td_select_{$fetch}"><input type="checkbox" name="select[e{$entryid}_c{$comm_id}]" /></td>{/if}
|
||||
<td>{$comm.date|date_format:"%D, %T"}</td>
|
||||
<td class="main_cell">
|
||||
{$comm.content|strip_tags}
|
||||
{if $delete}<input type="hidden" value="on" name="select[e{$entryid}_c{$comm_id}]" />
|
||||
|
||||
{/if}
|
||||
</td>
|
||||
<td>{if $comm.url}<a href="{$comm.url|wp_specialchars}">{$comm.name|wp_specialchars}</a>{else}{$comm.name|wp_specialchars}{/if}</td>
|
||||
<td><a href="mailto:{$comm.email|wp_specialchars}">{$comm.email|wp_specialchars}</a></td>
|
||||
<td>{$comm.ip-address}</td>
|
||||
{if !$delete}<td>
|
||||
{if $is_managing && $use_akismet}
|
||||
<a href="{$action_url|cmd_link:commspam:"e`$entryid`_c`$comm_id`"}" title="{$plang.man_spam}"><img src="{$plugin_url}imgs/spam.png" alt="{$plang.man_spam}" /></a>
|
||||
{elseif !$is_managing}
|
||||
<a href="{$action_url|cmd_link:publishcomm:"e`$entryid`_c`$comm.id`"}" title="{$plang.app_publish}"><img src="{$plugin_url}imgs/publish.png" alt="{$plang.app_publish}" /></a>
|
||||
{if $fetch=='akismet'}
|
||||
<a href="{$action_url|cmd_link:pubnoham:"e`$entryid`_c`$comm.id`"}" title="{$plang.app_pubnotham}"><img src="{$plugin_url}imgs/publish.png" alt="{$plang.app_pubnotham}" /></a>
|
||||
{/if}
|
||||
{/if}
|
||||
{if $is_managing}
|
||||
{assign var="rm_url" value=$action_url|cmd_link:deletecomm2:"e`$entryid`_c`$comm_id`"}
|
||||
{else}
|
||||
{assign var="rm_url" value=$action_url|cmd_link:deletecomm:"e`$entryid`_c`$comm_id`"}
|
||||
{/if}
|
||||
<a href="{$rm_url}" title="{$plang.app_delete}"><img src="{$plugin_url}imgs/delete.png" alt="{$plang.app_delete}" /></a>
|
||||
</td>
|
||||
{/if}
|
||||
</tr>
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
{if $i==0}
|
||||
<tr><td colspan="{if $delete}5{else}7{/if}">{$plang.app_nocomms}</td></tr>{/if}
|
||||
</tbody>
|
||||
</table>
|
||||
{if !$delete}
|
||||
<div class="commentcenter_select" style="display: none;">
|
||||
<a href="#" rel="selectAll[td_select_{$fetch}]">{$plang.select_all}</a>
|
||||
<a href="#" rel="deselectAll[td_select_{$fetch}]">{$plang.deselect_all}</a>
|
||||
</div>
|
||||
{/if}
|
61
fp-plugins/commentcenter/tpls/listpolicies.tpl
Normal file
@ -0,0 +1,61 @@
|
||||
<table id="commencenter-table">
|
||||
<thead id="commencenter-table-head">
|
||||
<tr>
|
||||
{if !$delete} <th style="width: 10%;">{$plang.select}</th>{/if}
|
||||
<th class="main-cell">{$plang.criteria}</th>
|
||||
<th style="width: 20%;">{$plang.behavoir}</th>
|
||||
{if !$delete} <th style="width: 25%;">{$plang.options}</th>{/if}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="commencenter-table-body">
|
||||
{foreach name=policies from=$policies key=id item=policy}
|
||||
<tr class="tr_policy{$id}">
|
||||
{if !$delete} <td class="td_select"><input type="checkbox" name="select[{$id}]" /></td>{/if}
|
||||
<td class="main-cell">
|
||||
{if $delete}<input type="hidden" name="del_policy[]" value="{$id}" />
|
||||
{/if}
|
||||
{if $policy.is_all}
|
||||
{$plang.all_entries}
|
||||
{elseif is_array($policy.entry) && count($policy.entry)>0}
|
||||
{$plang.fol_entries}
|
||||
<ul>
|
||||
{foreach from=$policy.entry item=entry}
|
||||
<li><span title="{$entry}">{$entry|idToSubject}</span></li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
{elseif !empty($policy.entry)}
|
||||
{$plang.fol_entries}
|
||||
<ul>
|
||||
<li><span title="{$policy.entry}">{$policy.entry|idToSubject}</span></li>
|
||||
</ul>
|
||||
{else}
|
||||
{if count($policy.categories)>0}
|
||||
<p>{$plang.fol_cats}
|
||||
{$policy.categories|@filed}</p>
|
||||
{/if}
|
||||
{if !empty($policy.older)}
|
||||
<p>{$plang.older|sprintf:"`$policy.older/86400`"}</p>
|
||||
{/if}
|
||||
{/if}
|
||||
</td>
|
||||
{if $policy.do==1}
|
||||
<td>{$plang.allow}</td>
|
||||
{elseif $policy.do==0}
|
||||
<td>{$plang.approvation}</td>
|
||||
{elseif $policy.do==-1}
|
||||
<td>{$plang.block}</td>
|
||||
{/if}
|
||||
{if !$delete} <td>
|
||||
<a href="{$action_url|cmd_link:polup:$id}" title="{$plang.up}" rel="polup[{$id}]"><img src="{$plugin_url}imgs/up.png" alt="{$plang.up}" /></a>
|
||||
<a href="{$action_url|cmd_link:poldown:$id}" title="{$plang.down}" rel="poldown[{$id}]"><img src="{$plugin_url}imgs/down.png" alt="{$plang.down}" /></a>
|
||||
<a href="{$action_url|cmd_link:poledit:$id}" title="{$plang.edit}"><img src="{$plugin_url}imgs/edit.png" alt="{$plang.edit}" /></a>
|
||||
<a href="{$action_url|cmd_link:poldelete:$id}" title="{$plang.delete}"><img src="{$plugin_url}imgs/delete.png" alt="{$plang.delete}" /></a>
|
||||
</td>{/if}
|
||||
</tr>
|
||||
{foreachelse}
|
||||
<tr>
|
||||
<td colspan="{if $delete}2{else}4{/if}">{$plang.nopolicies}</td>
|
||||
</tr>
|
||||
{/foreach}
|
||||
</tbody>
|
||||
</table>
|
18
fp-plugins/commentcenter/tpls/manage.tpl
Normal file
@ -0,0 +1,18 @@
|
||||
{include file=plugin:commentcenter/header}
|
||||
{html_form}
|
||||
<h2>{$plang.man_searcht}</h2>
|
||||
<p>{$plang.man_searchd}</p>
|
||||
<p><input type="text" name="entry" value="{$entry_id}" />
|
||||
{html_submit name="entry_search" id="entry_search" value=$plang.man_search}</p>
|
||||
|
||||
{if !empty($entry_id)}
|
||||
{assign var="titleok" value=$entry_id|idToSubject|wp_specialchars}
|
||||
<h2>{$plang.man_commfor|sprintf:$titleok}</h2>
|
||||
{include file=plugin:commentcenter/listcomments}
|
||||
<input type="hidden" name="entry_hid" value="{$entry_id}" />
|
||||
<div class="buttonbar">
|
||||
{html_submit name="mdelcomm_2" id="mdelcomm_2" value=$plang.app_dselected}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{/html_form}
|
16
fp-plugins/commentcenter/tpls/policies.tpl
Normal file
@ -0,0 +1,16 @@
|
||||
{include file=plugin:commentcenter/header}
|
||||
<h2>{$plang.policies}</h2>
|
||||
<p>{$plang.desc_pol}</p>
|
||||
{html_form}
|
||||
{include file=plugin:commentcenter/listpolicies}
|
||||
<div class="commentcenter_select" style="display: none;">
|
||||
<a href="#" rel="selectAll[td_select]">{$plang.select_all}</a>
|
||||
<a href="#" rel="deselectAll[td_select]">{$plang.deselect_all}</a>
|
||||
</div>
|
||||
<div id="commentcenter_options">
|
||||
<a href="{$action_url|cmd_link:poledit:-1}"><img src="{$plugin_url}imgs/edit.png" alt="{$plang.newpol}" />{$plang.newpol}</a>
|
||||
</div>
|
||||
<div class="buttonbar">
|
||||
{html_submit name="multidel" id="multidel" value=$plang.del_selected}
|
||||
</div>
|
||||
{/html_form}
|