introduce new app page layout
filter installed and not-installed apps properly kill unneeded file load category 'Installed' on page load adding documentation links new apps mgmt: first style adjustment apps mgmt: only show license and preview if they exist adding buttons new apps mgmt: fix for mobile use app icon if available new apps mgmt: position enable/disable toggle to the right new apps mgmt: proper display of icons or previews new apps mgmt: fix loading spinner reenable group selection for apps new apps mgmt: position enable button normally again new apps mgmt: clarify wording from 'Installed' to 'Enabled' reintroduce enable/disable Move rating image path generation to client-side Move expression outside of l10n fix group handling add buttons for 'More apps' and 'Add your app' again disable changed date of app for now adding recommended label style 'Recommended' app tag fixing php warning sort by rating adding meta-category 'Recommended' Only show existing documentation links lacy loading of screenshots making group based app activation work again adding support to get the app icon not only by the app name but also simply by the fixed name 'app.svg' adding app.svg for all core apps query string '?installed' is not longer needed update and uninstall is back + error feedback remove unneeded parameter fix alignment of 'recommended' label
|
@ -0,0 +1,51 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xml:space="preserve"
|
||||||
|
height="16px"
|
||||||
|
width="16px"
|
||||||
|
version="1.1"
|
||||||
|
y="0px"
|
||||||
|
x="0px"
|
||||||
|
viewBox="0 0 71 100"
|
||||||
|
id="svg2"
|
||||||
|
inkscape:version="0.48.5 r10040"
|
||||||
|
sodipodi:docname="app.svg"><metadata
|
||||||
|
id="metadata10"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
id="defs8" /><sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1014"
|
||||||
|
id="namedview6"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="14.75"
|
||||||
|
inkscape:cx="-21.423729"
|
||||||
|
inkscape:cy="8"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" /><path
|
||||||
|
d="m8 1c-2.2091 0-4 1.7909-4 4v2h-1v7h10v-7h-1v-2c0-2.2091-1.791-4-4-4zm0 2c1.1046 0 2 0.89543 2 2v2h-4v-2c0-1.1046 0.8954-2 2-2z"
|
||||||
|
transform="matrix(6.25,0,0,6.25,-14.5,0)"
|
||||||
|
id="path4"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" /><path
|
||||||
|
style="fill:none"
|
||||||
|
d="m 3.0644068,10.508475 0,-3.4576275 0.4655371,0 0.465537,0 0.049537,-1.2033899 C 4.1094633,4.2818838 4.1578923,4.0112428 4.4962182,3.3259708 4.7075644,2.8978935 4.9002217,2.6327599 5.2605792,2.2740624 6.7855365,0.75613022 8.9920507,0.69157582 10.623172,2.1171729 c 0.384104,0.3357058 0.882069,1.0763131 1.054177,1.5678422 0.147302,0.4206856 0.262873,1.6086448 0.266436,2.7387137 l 0.002,0.6271187 0.508474,0 0.508475,0 0,3.4576275 0,3.457627 -4.9491527,0 -4.9491525,0 0,-3.457627 z M 10.065882,6.3559322 c -0.02012,-0.3822034 -0.04774,-0.7076271 -0.0614,-0.7231639 -0.013653,-0.015537 -0.024824,0.281921 -0.024824,0.661017 l 0,0.6892655 -1.9630041,0 -1.963004,0 -0.023717,-0.4576271 -0.023717,-0.4576271 -0.013279,0.4915254 -0.013279,0.4915255 2.0613978,0 2.0613972,0 -0.03657,-0.6949153 0,0 z M 6.5396275,3.7118644 C 6.648082,3.5720339 6.7197092,3.4576271 6.6987988,3.4576271 c -0.062956,0 -0.5835446,0.6841947 -0.5835446,0.7669359 0,0.042237 0.051116,0.00136 0.1135916,-0.090834 0.062475,-0.092195 0.2023271,-0.2820343 0.3107817,-0.4218648 z M 9.7498983,4.0169492 C 9.6961899,3.9144068 9.5352369,3.723769 9.392225,3.5933098 L 9.1322034,3.356111 9.3784249,3.6272081 c 0.1354218,0.1491033 0.2814105,0.3397411 0.3244192,0.4236394 0.043009,0.083898 0.093162,0.1525423 0.1114515,0.1525423 0.01829,0 -0.010689,-0.083898 -0.064397,-0.1864406 l 0,0 z M 7.3032896,3.1315382 C 7.2704731,3.0987216 6.877102,3.3089557 6.8306315,3.3841466 6.8091904,3.4188389 6.911918,3.3813452 7.0589148,3.300827 7.2059117,3.2203088 7.3158803,3.1441289 7.3032896,3.1315382 l 0,0 z"
|
||||||
|
id="path3007"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
transform="matrix(6.25,0,0,6.25,-14.5,0)" /></svg>
|
After Width: | Height: | Size: 3.3 KiB |
|
@ -0,0 +1,212 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="32px"
|
||||||
|
width="32px"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
inkscape:version="0.48.5 r10040"
|
||||||
|
sodipodi:docname="app.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata80">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1014"
|
||||||
|
id="namedview78"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="7.375"
|
||||||
|
inkscape:cx="-13.559322"
|
||||||
|
inkscape:cy="16"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<defs
|
||||||
|
id="defs4">
|
||||||
|
<linearGradient
|
||||||
|
id="m"
|
||||||
|
y2="21.387"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x2="27.557"
|
||||||
|
gradientTransform="matrix(.89186 0 0 1.0539 3.1208 3.4122)"
|
||||||
|
y1="7.1627"
|
||||||
|
x1="27.557">
|
||||||
|
<stop
|
||||||
|
stop-color="#fff"
|
||||||
|
offset="0"
|
||||||
|
id="stop7" />
|
||||||
|
<stop
|
||||||
|
stop-color="#fff"
|
||||||
|
stop-opacity=".23529"
|
||||||
|
offset=".0097359"
|
||||||
|
id="stop9" />
|
||||||
|
<stop
|
||||||
|
stop-color="#fff"
|
||||||
|
stop-opacity=".15686"
|
||||||
|
offset=".99001"
|
||||||
|
id="stop11" />
|
||||||
|
<stop
|
||||||
|
stop-color="#fff"
|
||||||
|
stop-opacity=".39216"
|
||||||
|
offset="1"
|
||||||
|
id="stop13" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="l"
|
||||||
|
y2="43.761"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x2="35.793"
|
||||||
|
gradientTransform="matrix(.64444 0 0 .64286 .53352 -1.1074)"
|
||||||
|
y1="17.118"
|
||||||
|
x1="35.793">
|
||||||
|
<stop
|
||||||
|
stop-color="#b4cee1"
|
||||||
|
offset="0"
|
||||||
|
id="stop16" />
|
||||||
|
<stop
|
||||||
|
stop-color="#5d9fcd"
|
||||||
|
offset="1"
|
||||||
|
id="stop18" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="k"
|
||||||
|
y2="609.51"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x2="302.86"
|
||||||
|
gradientTransform="matrix(.051143 0 0 .015916 -2.49 22.299)"
|
||||||
|
y1="366.65"
|
||||||
|
x1="302.86">
|
||||||
|
<stop
|
||||||
|
stop-opacity="0"
|
||||||
|
offset="0"
|
||||||
|
id="stop21" />
|
||||||
|
<stop
|
||||||
|
offset=".5"
|
||||||
|
id="stop23" />
|
||||||
|
<stop
|
||||||
|
stop-opacity="0"
|
||||||
|
offset="1"
|
||||||
|
id="stop25" />
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient
|
||||||
|
id="n"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
cy="486.65"
|
||||||
|
cx="605.71"
|
||||||
|
gradientTransform="matrix(.019836 0 0 .015916 16.388 22.299)"
|
||||||
|
r="117.14">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
id="stop28" />
|
||||||
|
<stop
|
||||||
|
stop-opacity="0"
|
||||||
|
offset="1"
|
||||||
|
id="stop30" />
|
||||||
|
</radialGradient>
|
||||||
|
<radialGradient
|
||||||
|
id="o"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
cy="486.65"
|
||||||
|
cx="605.71"
|
||||||
|
gradientTransform="matrix(-.019836 0 0 .015916 15.601 22.299)"
|
||||||
|
r="117.14">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
id="stop33" />
|
||||||
|
<stop
|
||||||
|
stop-opacity="0"
|
||||||
|
offset="1"
|
||||||
|
id="stop35" />
|
||||||
|
</radialGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="j"
|
||||||
|
y2="34.143"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x2="21.37"
|
||||||
|
gradientTransform="matrix(.54384 0 0 .61466 3.2689 3.0908)"
|
||||||
|
y1="4.7324"
|
||||||
|
x1="21.37">
|
||||||
|
<stop
|
||||||
|
stop-color="#fff"
|
||||||
|
offset="0"
|
||||||
|
id="stop38" />
|
||||||
|
<stop
|
||||||
|
stop-color="#fff"
|
||||||
|
stop-opacity=".23529"
|
||||||
|
offset=".11063"
|
||||||
|
id="stop40" />
|
||||||
|
<stop
|
||||||
|
stop-color="#fff"
|
||||||
|
stop-opacity=".15686"
|
||||||
|
offset=".99001"
|
||||||
|
id="stop42" />
|
||||||
|
<stop
|
||||||
|
stop-color="#fff"
|
||||||
|
stop-opacity=".39216"
|
||||||
|
offset="1"
|
||||||
|
id="stop44" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="i"
|
||||||
|
y2="16"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x2="62.989"
|
||||||
|
gradientTransform="matrix(.61905 0 0 .61905 -30.392 -.57170)"
|
||||||
|
y1="13"
|
||||||
|
x1="62.989">
|
||||||
|
<stop
|
||||||
|
stop-color="#f9f9f9"
|
||||||
|
offset="0"
|
||||||
|
id="stop47" />
|
||||||
|
<stop
|
||||||
|
stop-color="#d8d8d8"
|
||||||
|
offset="1"
|
||||||
|
id="stop49" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
id="d"
|
||||||
|
y2="3.6337"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
y1="53.514"
|
||||||
|
gradientTransform="matrix(.50703 0 0 .503 68.029 -.67050)"
|
||||||
|
x2="-51.786"
|
||||||
|
x1="-51.786">
|
||||||
|
<stop
|
||||||
|
stop-opacity=".32174"
|
||||||
|
offset="0"
|
||||||
|
id="stop52" />
|
||||||
|
<stop
|
||||||
|
stop-opacity=".27826"
|
||||||
|
offset="1"
|
||||||
|
id="stop54" />
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<path
|
||||||
|
d="m 14.902928,3.2372882 4.76117,4.5146377 -7.141758,6.7719561 4.761174,4.514639 7.141756,-6.771956 4.761171,4.514636 V 3.2372882 H 14.902928 z M 5.3805857,5.4946057 C 4.0617412,5.4946057 3,6.501372 3,7.7519259 V 25.810477 c 0,1.250555 1.0617412,2.257319 2.3805857,2.257319 H 24.42527 c 1.318844,0 2.380584,-1.006764 2.380584,-2.257319 v -6.771956 l -2.380584,-2.25732 v 9.029276 H 5.3805857 V 7.7519259 H 14.902928 L 12.52234,5.4946057 H 5.3805857 z"
|
||||||
|
id="path76"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="opacity:0.7;fill:#ffffff;fill-opacity:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.6 KiB |
|
@ -0,0 +1,54 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="16"
|
||||||
|
width="16"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
inkscape:version="0.48.5 r10040"
|
||||||
|
sodipodi:docname="app.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata12">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs10" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1014"
|
||||||
|
id="namedview8"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="14.75"
|
||||||
|
inkscape:cx="-6.6440678"
|
||||||
|
inkscape:cy="8"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
id="path6"
|
||||||
|
d="m 12.228,1 c -1.3565,0 -2.4592,1.0977 -2.4592,2.4542 0,0.075 0.0084,0.1504 0.0149,0.2236 L 5.0491,6.0923 C 4.62,5.7256 4.06299,5.506 3.4544,5.506 c -1.3565,0 -2.4542,1.0977 -2.4542,2.4543 0,1.3565 1.0977,2.4542 2.4542,2.4542 0.54607,0 1.0528,-0.1755 1.4606,-0.477 l 4.8637,2.4741 c -0.0024,0.044 -0.0099,0.089 -0.0099,0.1342 0,1.3565 1.1027,2.4542 2.4592,2.4542 1.3565,0 2.4542,-1.0977 2.4542,-2.4542 0,-1.3565 -1.0977,-2.4592 -2.4542,-2.4592 -0.63653,0 -1.218,0.2437 -1.6544,0.6409 l -4.6953,-2.4 C 5.89722,8.2047 5.91308,8.0781 5.91308,7.95 c 0,-0.072 -0.0089,-0.1437 -0.0149,-0.2137 l 4.7395,-2.4145 c 0.42802,0.3627 0.98488,0.5813 1.5898,0.5813 1.3565,0 2.4542,-1.1027 2.4542,-2.4592 0,-1.3565 -1.0977,-2.4542 -2.4542,-2.4542 z"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
|
@ -0,0 +1,54 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="16"
|
||||||
|
width="16"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
inkscape:version="0.48.5 r10040"
|
||||||
|
sodipodi:docname="app.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata10">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs8" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1014"
|
||||||
|
id="namedview6"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="14.75"
|
||||||
|
inkscape:cx="-6.6440678"
|
||||||
|
inkscape:cy="8"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<path
|
||||||
|
d="m6.5 1-0.5 1h-3c-0.554 0-1 0.446-1 1v1h12v-1c0-0.554-0.446-1-1-1h-3l-0.5-1zm-3.5 4 0.875 9c0.061 0.549 0.5729 1 1.125 1h6c0.55232 0 1.064-0.45102 1.125-1l0.875-9z"
|
||||||
|
fill-rule="evenodd"
|
||||||
|
id="path4"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1,103 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="16"
|
||||||
|
width="16"
|
||||||
|
version="1.0"
|
||||||
|
id="svg2"
|
||||||
|
inkscape:version="0.48.5 r10040"
|
||||||
|
sodipodi:docname="app.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata20">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs18" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1014"
|
||||||
|
id="namedview16"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="14.75"
|
||||||
|
inkscape:cx="-6.6440678"
|
||||||
|
inkscape:cy="8"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<rect
|
||||||
|
rx=".5"
|
||||||
|
ry=".5"
|
||||||
|
height="4"
|
||||||
|
width="4"
|
||||||
|
y="1"
|
||||||
|
x="1"
|
||||||
|
id="rect4"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
<rect
|
||||||
|
rx=".5"
|
||||||
|
ry=".5"
|
||||||
|
height="1"
|
||||||
|
width="9"
|
||||||
|
y="2"
|
||||||
|
x="6"
|
||||||
|
id="rect6"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
<rect
|
||||||
|
rx=".5"
|
||||||
|
ry=".5"
|
||||||
|
height="4"
|
||||||
|
width="4"
|
||||||
|
y="6"
|
||||||
|
x="1"
|
||||||
|
id="rect8"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
<rect
|
||||||
|
rx=".5"
|
||||||
|
ry=".5"
|
||||||
|
height="1"
|
||||||
|
width="9"
|
||||||
|
y="7"
|
||||||
|
x="6"
|
||||||
|
id="rect10"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
<rect
|
||||||
|
rx=".5"
|
||||||
|
ry=".5"
|
||||||
|
height="4"
|
||||||
|
width="4"
|
||||||
|
y="11"
|
||||||
|
x="1"
|
||||||
|
id="rect12"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
<rect
|
||||||
|
rx=".5"
|
||||||
|
ry=".5"
|
||||||
|
height="1"
|
||||||
|
width="9"
|
||||||
|
y="12"
|
||||||
|
x="6"
|
||||||
|
id="rect14"
|
||||||
|
style="fill:#ffffff;fill-opacity:1" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
|
@ -0,0 +1,61 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="16"
|
||||||
|
width="16"
|
||||||
|
version="1.0"
|
||||||
|
id="svg2"
|
||||||
|
inkscape:version="0.48.5 r10040"
|
||||||
|
sodipodi:docname="app.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata12">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs10" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1014"
|
||||||
|
id="namedview8"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="14.75"
|
||||||
|
inkscape:cx="-6.6440678"
|
||||||
|
inkscape:cy="8"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000"
|
||||||
|
fill-opacity="0"
|
||||||
|
height="97.986"
|
||||||
|
width="163.31"
|
||||||
|
y="-32.993"
|
||||||
|
x="-62.897"
|
||||||
|
id="rect4" />
|
||||||
|
<path
|
||||||
|
style="block-progression:tb;color:#000000;text-transform:none;text-indent:0;fill:#ffffff;fill-opacity:1"
|
||||||
|
d="m8.4036 1c-1.7312 0-3.1998 1.2661-3.1998 2.9 0.012287 0.51643 0.058473 1.1532 0.36664 2.5v0.033333l0.033328 0.033333c0.098928 0.28338 0.24289 0.44549 0.4333 0.66666s0.41742 0.48149 0.63328 0.69999c0.025397 0.025708 0.041676 0.041633 0.066656 0.066677 0.04281 0.18631 0.094672 0.38681 0.13332 0.56666 0.10284 0.47851 0.092296 0.81737 0.066668 0.93332-0.74389 0.26121-1.6694 0.57228-2.4998 0.93332-0.46622 0.2027-0.8881 0.3837-1.2332 0.59999-0.34513 0.2163-0.68837 0.37971-0.79994 0.86666-0.16004 0.63293-0.19866 0.7539-0.39997 1.5333-0.027212 0.20914 0.083011 0.42961 0.26665 0.53333 1.5078 0.81451 3.824 1.1423 6.1329 1.1333s4.6066-0.35609 6.0662-1.1333c0.11739-0.07353 0.14304-0.10869 0.13332-0.2333-0.04365-0.68908-0.08154-1.3669-0.13332-1.7666-0.01807-0.09908-0.06492-0.19275-0.13332-0.26666-0.46366-0.5537-1.1564-0.89218-1.9665-1.2333-0.7396-0.31144-1.6067-0.63486-2.4665-0.99999-0.048123-0.10721-0.095926-0.41912 0-0.89999 0.025759-0.12912 0.066096-0.26742 0.099994-0.4 0.0808-0.090507 0.14378-0.16447 0.23332-0.26666 0.19096-0.21796 0.39614-0.44661 0.56662-0.66666s0.30996-0.40882 0.39997-0.66666l0.03333-0.033333c0.34839-1.4062 0.34857-1.9929 0.36664-2.5v-0.033333c0-1.6339-1.4686-2.9-3.1998-2.9z"
|
||||||
|
id="path6" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
|
@ -0,0 +1,61 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
height="16"
|
||||||
|
width="16"
|
||||||
|
version="1.0"
|
||||||
|
id="svg2"
|
||||||
|
inkscape:version="0.48.5 r10040"
|
||||||
|
sodipodi:docname="app.svg">
|
||||||
|
<metadata
|
||||||
|
id="metadata12">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs10" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1"
|
||||||
|
objecttolerance="10"
|
||||||
|
gridtolerance="10"
|
||||||
|
guidetolerance="10"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1014"
|
||||||
|
id="namedview8"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="14.75"
|
||||||
|
inkscape:cx="-6.6440678"
|
||||||
|
inkscape:cy="8"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="27"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg2" />
|
||||||
|
<rect
|
||||||
|
style="color:#000000"
|
||||||
|
fill-opacity="0"
|
||||||
|
height="97.986"
|
||||||
|
width="163.31"
|
||||||
|
y="-32.993"
|
||||||
|
x="-62.897"
|
||||||
|
id="rect4" />
|
||||||
|
<path
|
||||||
|
style="block-progression:tb;color:#000000;text-transform:none;text-indent:0;fill:#ffffff;fill-opacity:1"
|
||||||
|
d="m8.4036 1c-1.7312 0-3.1998 1.2661-3.1998 2.9 0.012287 0.51643 0.058473 1.1532 0.36664 2.5v0.033333l0.033328 0.033333c0.098928 0.28338 0.24289 0.44549 0.4333 0.66666s0.41742 0.48149 0.63328 0.69999c0.025397 0.025708 0.041676 0.041633 0.066656 0.066677 0.04281 0.18631 0.094672 0.38681 0.13332 0.56666 0.10284 0.47851 0.092296 0.81737 0.066668 0.93332-0.74389 0.26121-1.6694 0.57228-2.4998 0.93332-0.46622 0.2027-0.8881 0.3837-1.2332 0.59999-0.34513 0.2163-0.68837 0.37971-0.79994 0.86666-0.16004 0.63293-0.19866 0.7539-0.39997 1.5333-0.027212 0.20914 0.083011 0.42961 0.26665 0.53333 1.5078 0.81451 3.824 1.1423 6.1329 1.1333s4.6066-0.35609 6.0662-1.1333c0.11739-0.07353 0.14304-0.10869 0.13332-0.2333-0.04365-0.68908-0.08154-1.3669-0.13332-1.7666-0.01807-0.09908-0.06492-0.19275-0.13332-0.26666-0.46366-0.5537-1.1564-0.89218-1.9665-1.2333-0.7396-0.31144-1.6067-0.63486-2.4665-0.99999-0.048123-0.10721-0.095926-0.41912 0-0.89999 0.025759-0.12912 0.066096-0.26742 0.099994-0.4 0.0808-0.090507 0.14378-0.16447 0.23332-0.26666 0.19096-0.21796 0.39614-0.44661 0.56662-0.66666s0.30996-0.40882 0.39997-0.66666l0.03333-0.033333c0.34839-1.4062 0.34857-1.9929 0.36664-2.5v-0.033333c0-1.6339-1.4686-2.9-3.1998-2.9z"
|
||||||
|
id="path6" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 299 B |
Before Width: | Height: | Size: 299 B After Width: | Height: | Size: 441 B |
Before Width: | Height: | Size: 557 B After Width: | Height: | Size: 464 B |
Before Width: | Height: | Size: 464 B |
Before Width: | Height: | Size: 441 B After Width: | Height: | Size: 594 B |
Before Width: | Height: | Size: 594 B After Width: | Height: | Size: 620 B |
Before Width: | Height: | Size: 620 B After Width: | Height: | Size: 602 B |
Before Width: | Height: | Size: 602 B After Width: | Height: | Size: 621 B |
Before Width: | Height: | Size: 621 B After Width: | Height: | Size: 603 B |
Before Width: | Height: | Size: 603 B After Width: | Height: | Size: 621 B |
Before Width: | Height: | Size: 621 B After Width: | Height: | Size: 584 B |
Before Width: | Height: | Size: 584 B After Width: | Height: | Size: 557 B |
|
@ -119,7 +119,7 @@
|
||||||
<!-- show "More apps" link to app administration directly in app navigation, as last entry -->
|
<!-- show "More apps" link to app administration directly in app navigation, as last entry -->
|
||||||
<?php if(OC_User::isAdminUser(OC_User::getUser())): ?>
|
<?php if(OC_User::isAdminUser(OC_User::getUser())): ?>
|
||||||
<li id="apps-management">
|
<li id="apps-management">
|
||||||
<a href="<?php print_unescaped(OC_Helper::linkToRoute('settings_apps').'?installed'); ?>" title=""
|
<a href="<?php print_unescaped(OC_Helper::linkToRoute('settings_apps')); ?>" title=""
|
||||||
<?php if( $_['appsmanagement_active'] ): ?> class="active"<?php endif; ?>>
|
<?php if( $_['appsmanagement_active'] ): ?> class="active"<?php endif; ?>>
|
||||||
<img class="app-icon svg" alt="" src="<?php print_unescaped(OC_Helper::imagePath('settings', 'apps.svg')); ?>"/>
|
<img class="app-icon svg" alt="" src="<?php print_unescaped(OC_Helper::imagePath('settings', 'apps.svg')); ?>"/>
|
||||||
<div class="icon-loading-dark" style="display:none;"></div>
|
<div class="icon-loading-dark" style="display:none;"></div>
|
||||||
|
|
|
@ -815,7 +815,7 @@ class OC_App {
|
||||||
* Lists all apps, this is used in apps.php
|
* Lists all apps, this is used in apps.php
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function listAllApps() {
|
public static function listAllApps($onlyLocal = false) {
|
||||||
$installedApps = OC_App::getAllApps();
|
$installedApps = OC_App::getAllApps();
|
||||||
|
|
||||||
//TODO which apps do we want to blacklist and how do we integrate
|
//TODO which apps do we want to blacklist and how do we integrate
|
||||||
|
@ -823,6 +823,7 @@ class OC_App {
|
||||||
|
|
||||||
$blacklist = array('files'); //we don't want to show configuration for these
|
$blacklist = array('files'); //we don't want to show configuration for these
|
||||||
$appList = array();
|
$appList = array();
|
||||||
|
$l = \OC::$server->getL10N('core');
|
||||||
|
|
||||||
foreach ($installedApps as $app) {
|
foreach ($installedApps as $app) {
|
||||||
if (array_search($app, $blacklist) === false) {
|
if (array_search($app, $blacklist) === false) {
|
||||||
|
@ -849,24 +850,36 @@ class OC_App {
|
||||||
|
|
||||||
if(isset($info['shipped']) and ($info['shipped'] == 'true')) {
|
if(isset($info['shipped']) and ($info['shipped'] == 'true')) {
|
||||||
$info['internal'] = true;
|
$info['internal'] = true;
|
||||||
$info['internallabel'] = 'Internal App';
|
$info['internallabel'] = $l->t('Recommended');
|
||||||
$info['internalclass'] = '';
|
$info['internalclass'] = 'recommendedapp';
|
||||||
$info['removable'] = false;
|
$info['removable'] = false;
|
||||||
} else {
|
} else {
|
||||||
$info['internal'] = false;
|
$info['internal'] = false;
|
||||||
$info['internallabel'] = '3rd Party';
|
|
||||||
$info['internalclass'] = 'externalapp';
|
|
||||||
$info['removable'] = true;
|
$info['removable'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$info['update'] = OC_Installer::isUpdateAvailable($app);
|
$info['update'] = OC_Installer::isUpdateAvailable($app);
|
||||||
|
|
||||||
$info['preview'] = OC_Helper::imagePath('settings', 'trans.png');
|
$appIcon = self::getAppPath($app) . '/img/' . $app.'.svg';
|
||||||
|
if (file_exists($appIcon)) {
|
||||||
|
$info['preview'] = OC_Helper::imagePath($app, $app.'.svg');
|
||||||
|
$info['previewAsIcon'] = true;
|
||||||
|
} else {
|
||||||
|
$appIcon = self::getAppPath($app) . '/img/app.svg';
|
||||||
|
if (file_exists($appIcon)) {
|
||||||
|
$info['preview'] = OC_Helper::imagePath($app, 'app.svg');
|
||||||
|
$info['previewAsIcon'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
$info['version'] = OC_App::getAppVersion($app);
|
$info['version'] = OC_App::getAppVersion($app);
|
||||||
$appList[] = $info;
|
$appList[] = $info;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$remoteApps = OC_App::getAppstoreApps();
|
if ($onlyLocal) {
|
||||||
|
$remoteApps = array();
|
||||||
|
} else {
|
||||||
|
$remoteApps = OC_App::getAppstoreApps();
|
||||||
|
}
|
||||||
if ($remoteApps) {
|
if ($remoteApps) {
|
||||||
// Remove duplicates
|
// Remove duplicates
|
||||||
foreach ($appList as $app) {
|
foreach ($appList as $app) {
|
||||||
|
@ -898,9 +911,11 @@ class OC_App {
|
||||||
}
|
}
|
||||||
|
|
||||||
// priority 3: recommended
|
// priority 3: recommended
|
||||||
if ($a['internalclass'] != $b['internalclass']) {
|
$internalClassA = isset($a['internalclass']) ? $a['internalclass'] : '';
|
||||||
$aTemp = ($a['internalclass'] == 'recommendedapp' ? 1 : 0);
|
$internalClassB = isset($b['internalclass']) ? $b['internalclass'] : '';
|
||||||
$bTemp = ($b['internalclass'] == 'recommendedapp' ? 1 : 0);
|
if ($internalClassA != $internalClassB) {
|
||||||
|
$aTemp = ($internalClassA == 'recommendedapp' ? 1 : 0);
|
||||||
|
$bTemp = ($internalClassB == 'recommendedapp' ? 1 : 0);
|
||||||
return ($bTemp - $aTemp);
|
return ($bTemp - $aTemp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -917,63 +932,40 @@ class OC_App {
|
||||||
* @return array, multi-dimensional array of apps.
|
* @return array, multi-dimensional array of apps.
|
||||||
* Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description
|
* Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description
|
||||||
*/
|
*/
|
||||||
public static function getAppstoreApps($filter = 'approved') {
|
public static function getAppstoreApps($filter = 'approved', $category = null) {
|
||||||
$categoryNames = OC_OCSClient::getCategories();
|
$categories = array($category);
|
||||||
if (is_array($categoryNames)) {
|
if (is_null($category)) {
|
||||||
// Check that categories of apps were retrieved correctly
|
$categoryNames = OC_OCSClient::getCategories();
|
||||||
if (!$categories = array_keys($categoryNames)) {
|
if (is_array($categoryNames)) {
|
||||||
|
// Check that categories of apps were retrieved correctly
|
||||||
|
if (!$categories = array_keys($categoryNames)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$page = 0;
|
$page = 0;
|
||||||
$remoteApps = OC_OCSClient::getApplications($categories, $page, $filter);
|
$remoteApps = OC_OCSClient::getApplications($categories, $page, $filter);
|
||||||
$app1 = array();
|
$app1 = array();
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($remoteApps as $app) {
|
$l = \OC::$server->getL10N('core');
|
||||||
$app1[$i] = $app;
|
foreach ($remoteApps as $app) {
|
||||||
$app1[$i]['author'] = $app['personid'];
|
$app1[$i] = $app;
|
||||||
$app1[$i]['ocs_id'] = $app['id'];
|
$app1[$i]['author'] = $app['personid'];
|
||||||
$app1[$i]['internal'] = $app1[$i]['active'] = 0;
|
$app1[$i]['ocs_id'] = $app['id'];
|
||||||
$app1[$i]['update'] = false;
|
$app1[$i]['internal'] = $app1[$i]['active'] = 0;
|
||||||
$app1[$i]['groups'] = false;
|
$app1[$i]['update'] = false;
|
||||||
$app1[$i]['removable'] = false;
|
$app1[$i]['groups'] = false;
|
||||||
if ($app['label'] == 'recommended') {
|
$app1[$i]['score'] = $app['score'];
|
||||||
$app1[$i]['internallabel'] = 'Recommended';
|
$app1[$i]['removable'] = false;
|
||||||
$app1[$i]['internalclass'] = 'recommendedapp';
|
if ($app['label'] == 'recommended') {
|
||||||
} else {
|
$app1[$i]['internallabel'] = $l->t('Recommended');
|
||||||
$app1[$i]['internallabel'] = '3rd Party';
|
$app1[$i]['internalclass'] = 'recommendedapp';
|
||||||
$app1[$i]['internalclass'] = 'externalapp';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// rating img
|
|
||||||
if ($app['score'] < 5) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s1.png" );
|
|
||||||
} elseif ($app['score'] < 15) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s2.png" );
|
|
||||||
} elseif($app['score'] < 25) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s3.png" );
|
|
||||||
} elseif($app['score'] < 35) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s4.png" );
|
|
||||||
} elseif($app['score'] < 45) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s5.png" );
|
|
||||||
} elseif($app['score'] < 55) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s6.png" );
|
|
||||||
} elseif($app['score'] < 65) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s7.png" );
|
|
||||||
} elseif($app['score'] < 75) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s8.png" );
|
|
||||||
} elseif($app['score'] < 85) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s9.png" );
|
|
||||||
} elseif($app['score'] < 95) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s10.png" );
|
|
||||||
} elseif($app['score'] < 100) {
|
|
||||||
$img = OC_Helper::imagePath( "core", "rating/s11.png" );
|
|
||||||
}
|
|
||||||
|
|
||||||
$app1[$i]['score'] = '<img src="' . $img . '"> Score: ' . $app['score'] . '%';
|
|
||||||
$i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($app1)) {
|
if (empty($app1)) {
|
||||||
|
|
|
@ -201,11 +201,10 @@ class OC_Installer{
|
||||||
/**
|
/**
|
||||||
* update an app by it's id
|
* update an app by it's id
|
||||||
* @param integer $ocsid
|
* @param integer $ocsid
|
||||||
* @param bool $isShipped
|
|
||||||
* @return bool
|
* @return bool
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public static function updateAppByOCSId($ocsid, $isShipped=false) {
|
public static function updateAppByOCSId($ocsid) {
|
||||||
$appdata = OC_OCSClient::getApplication($ocsid);
|
$appdata = OC_OCSClient::getApplication($ocsid);
|
||||||
$download = OC_OCSClient::getApplicationDownload($ocsid, 1);
|
$download = OC_OCSClient::getApplicationDownload($ocsid, 1);
|
||||||
|
|
||||||
|
|
|
@ -142,9 +142,11 @@ class OC_OCSClient{
|
||||||
$app['license']=(string)$tmp[$i]->license;
|
$app['license']=(string)$tmp[$i]->license;
|
||||||
$app['detailpage']=(string)$tmp[$i]->detailpage;
|
$app['detailpage']=(string)$tmp[$i]->detailpage;
|
||||||
$app['preview']=(string)$tmp[$i]->smallpreviewpic1;
|
$app['preview']=(string)$tmp[$i]->smallpreviewpic1;
|
||||||
|
$app['preview-full']=(string)$tmp[$i]->previewpic1;
|
||||||
$app['changed']=strtotime($tmp[$i]->changed);
|
$app['changed']=strtotime($tmp[$i]->changed);
|
||||||
$app['description']=(string)$tmp[$i]->description;
|
$app['description']=(string)$tmp[$i]->description;
|
||||||
$app['score']=(string)$tmp[$i]->score;
|
$app['score']=(string)$tmp[$i]->score;
|
||||||
|
$app['downloads'] = $tmp[$i]->downloads;
|
||||||
|
|
||||||
$apps[]=$app;
|
$apps[]=$app;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
OC_JSON::checkAdminUser();
|
||||||
|
|
||||||
|
$l = OC_L10N::get('settings');
|
||||||
|
|
||||||
|
$categories = array(
|
||||||
|
array('id' => 0, 'displayName' => (string)$l->t('Enabled') ),
|
||||||
|
array('id' => 1, 'displayName' => (string)$l->t('Not enabled') ),
|
||||||
|
);
|
||||||
|
|
||||||
|
if(OC_Config::getValue('appstoreenabled', true)) {
|
||||||
|
$categories[] = array('id' => 2, 'displayName' => (string)$l->t('Recommended') );
|
||||||
|
// apps from external repo via OCS
|
||||||
|
$ocs = OC_OCSClient::getCategories();
|
||||||
|
foreach($ocs as $k => $v) {
|
||||||
|
$categories[] = array(
|
||||||
|
'id' => $k,
|
||||||
|
'displayName' => str_replace('ownCloud ', '', $v)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OCP\JSON::success($categories);
|
|
@ -0,0 +1,65 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2014 Thomas Müller <deepdiver@owncloud.com>
|
||||||
|
* This file is licensed under the Affero General Public License version 3 or
|
||||||
|
* later.
|
||||||
|
* See the COPYING-README file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
OC_JSON::checkAdminUser();
|
||||||
|
|
||||||
|
$l = OC_L10N::get('settings');
|
||||||
|
|
||||||
|
$category = intval($_GET['category']);
|
||||||
|
$apps = array();
|
||||||
|
|
||||||
|
switch($category) {
|
||||||
|
// installed apps
|
||||||
|
case 0:
|
||||||
|
$apps = \OC_App::listAllApps(true);
|
||||||
|
$apps = array_filter($apps, function($app) {
|
||||||
|
return $app['active'];
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
// not-installed apps
|
||||||
|
case 1:
|
||||||
|
$apps = \OC_App::listAllApps(true);
|
||||||
|
$apps = array_filter($apps, function($app) {
|
||||||
|
return !$app['active'];
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if ($category === 2) {
|
||||||
|
$apps = \OC_App::getAppstoreApps('approved');
|
||||||
|
$apps = array_filter($apps, function($app) {
|
||||||
|
return isset($app['internalclass']) && $app['internalclass'] === 'recommendedapp';
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
$apps = \OC_App::getAppstoreApps('approved', $category);
|
||||||
|
}
|
||||||
|
if (!$apps) {
|
||||||
|
$apps = array();
|
||||||
|
}
|
||||||
|
usort($apps, function ($a, $b) {
|
||||||
|
$a = (int)$a['score'];
|
||||||
|
$b = (int)$b['score'];
|
||||||
|
if ($a === $b) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return ($a > $b) ? -1 : 1;
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fix groups to be an array
|
||||||
|
$apps = array_map(function($app){
|
||||||
|
$groups = array();
|
||||||
|
if (is_string($app['groups'])) {
|
||||||
|
$groups = json_decode($app['groups']);
|
||||||
|
}
|
||||||
|
$app['groups'] = $groups;
|
||||||
|
$app['canUnInstall'] = !$app['active'] && $app['removable'];
|
||||||
|
return $app;
|
||||||
|
}, $apps);
|
||||||
|
|
||||||
|
OCP\JSON::success(array("apps" => $apps));
|
|
@ -1,68 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Copyright (c) 2012 Thomas Tanghus <thomas@tanghus.net>
|
|
||||||
* This file is licensed under the Affero General Public License version 3 or
|
|
||||||
* later.
|
|
||||||
* See the COPYING-README file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
OC_JSON::checkAdminUser();
|
|
||||||
|
|
||||||
$l = \OC::$server->getL10N('settings');
|
|
||||||
|
|
||||||
if(OC_Config::getValue('appstoreenabled', true)==false) {
|
|
||||||
OCP\JSON::success(array('type' => 'external', 'data' => array()));
|
|
||||||
}
|
|
||||||
|
|
||||||
$enabledApps=OC_App::getEnabledApps();
|
|
||||||
|
|
||||||
if(is_null($enabledApps)) {
|
|
||||||
OCP\JSON::error(array('data' => array('message' => $l->t('Unable to load list from App Store'))));
|
|
||||||
}
|
|
||||||
|
|
||||||
$apps=array();
|
|
||||||
|
|
||||||
// apps from external repo via OCS
|
|
||||||
$categoryNames=OC_OCSClient::getCategories();
|
|
||||||
if(is_array($categoryNames)) {
|
|
||||||
$categories=array_keys($categoryNames);
|
|
||||||
$page=0;
|
|
||||||
$filter='approved';
|
|
||||||
$externalApps=OC_OCSClient::getApplications($categories, $page, $filter);
|
|
||||||
foreach($externalApps as $app) {
|
|
||||||
// show only external apps that aren't enabled yet
|
|
||||||
$local=false;
|
|
||||||
foreach($enabledApps as $a) {
|
|
||||||
if($a === $app['name']) {
|
|
||||||
$local=true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!$local) {
|
|
||||||
if($app['preview'] === '') {
|
|
||||||
$pre=OC_Helper::imagePath('settings', 'trans.png');
|
|
||||||
} else {
|
|
||||||
$pre=$app['preview'];
|
|
||||||
}
|
|
||||||
if($app['label'] === 'recommended') {
|
|
||||||
$label='3rd Party';
|
|
||||||
} else {
|
|
||||||
$label='Recommended';
|
|
||||||
}
|
|
||||||
$apps[]=array(
|
|
||||||
'name'=>$app['name'],
|
|
||||||
'id'=>$app['id'],
|
|
||||||
'active'=>false,
|
|
||||||
'description'=>$app['description'],
|
|
||||||
'author'=>$app['personid'],
|
|
||||||
'license'=>$app['license'],
|
|
||||||
'preview'=>$pre,
|
|
||||||
'internal'=>false,
|
|
||||||
'internallabel'=>$label,
|
|
||||||
'update'=>false,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
OCP\JSON::success(array('type' => 'external', 'data' => $apps));
|
|
|
@ -12,30 +12,33 @@ if (!array_key_exists('appid', $_POST)) {
|
||||||
OCP\JSON::error(array(
|
OCP\JSON::error(array(
|
||||||
'message' => 'No AppId given!'
|
'message' => 'No AppId given!'
|
||||||
));
|
));
|
||||||
exit;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$appId = $_POST['appid'];
|
$appId = $_POST['appid'];
|
||||||
|
|
||||||
if (!is_numeric($appId)) {
|
if (!is_numeric($appId)) {
|
||||||
$appId = OC_Appconfig::getValue($appId, 'ocsid', null);
|
$appId = \OC::$server->getAppConfig()->getValue($appId, 'ocsid', null);
|
||||||
$isShipped = OC_App::isShipped($appId);
|
|
||||||
|
|
||||||
if ($appId === null) {
|
if ($appId === null) {
|
||||||
OCP\JSON::error(array(
|
OCP\JSON::error(array(
|
||||||
'message' => 'No OCS-ID found for app!'
|
'message' => 'No OCS-ID found for app!'
|
||||||
));
|
));
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
$isShipped = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$appId = OC_App::cleanAppId($appId);
|
$appId = OC_App::cleanAppId($appId);
|
||||||
|
|
||||||
\OC_Config::setValue('maintenance', true);
|
$config = \OC::$server->getConfig();
|
||||||
$result = OC_Installer::updateAppByOCSId($appId, $isShipped);
|
$config->setSystemValue('maintenance', true);
|
||||||
\OC_Config::setValue('maintenance', false);
|
try {
|
||||||
|
$result = OC_Installer::updateAppByOCSId($appId);
|
||||||
|
$config->setSystemValue('maintenance', false);
|
||||||
|
} catch(Exception $ex) {
|
||||||
|
$config->setSystemValue('maintenance', false);
|
||||||
|
OC_JSON::error(array("data" => array( "message" => $ex->getMessage() )));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if($result !== false) {
|
if($result !== false) {
|
||||||
OC_JSON::success(array('data' => array('appid' => $appId)));
|
OC_JSON::success(array('data' => array('appid' => $appId)));
|
||||||
|
|
|
@ -25,21 +25,14 @@ OC_Util::checkAdminUser();
|
||||||
\OC::$server->getSession()->close();
|
\OC::$server->getSession()->close();
|
||||||
|
|
||||||
// Load the files we need
|
// Load the files we need
|
||||||
OCP\Util::addStyle('settings', 'settings' );
|
\OCP\Util::addScript('handlebars-v1.3.0');
|
||||||
OCP\Util::addScript('settings', 'settings');
|
\OCP\Util::addScript("settings", "settings");
|
||||||
OCP\Util::addScript('core', 'select2/select2');
|
\OCP\Util::addStyle("settings", "settings");
|
||||||
OCP\Util::addStyle('core', 'select2/select2');
|
\OCP\Util::addScript('core', 'select2/select2');
|
||||||
OC_App::setActiveNavigationEntry( "core_apps" );
|
\OCP\Util::addStyle('core', 'select2/select2');
|
||||||
|
\OCP\Util::addScript("settings", "apps");
|
||||||
$combinedApps = OC_App::listAllApps();
|
\OC_App::setActiveNavigationEntry( "core_apps" );
|
||||||
|
|
||||||
$tmpl = new OC_Template( "settings", "apps", "user" );
|
$tmpl = new OC_Template( "settings", "apps", "user" );
|
||||||
|
|
||||||
$tmpl->assign('apps', $combinedApps);
|
|
||||||
|
|
||||||
$appid = (isset($_GET['appid'])?strip_tags($_GET['appid']):'');
|
|
||||||
|
|
||||||
$tmpl->assign('appid', $appid);
|
|
||||||
|
|
||||||
$tmpl->printPage();
|
$tmpl->printPage();
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,11 @@ input.userFilter {width: 200px;}
|
||||||
.ie8 table.hascontrols{border-collapse:collapse;width: 100%;}
|
.ie8 table.hascontrols{border-collapse:collapse;width: 100%;}
|
||||||
.ie8 table.hascontrols tbody tr{border-collapse:collapse;border: 1px solid #ddd !important;}
|
.ie8 table.hascontrols tbody tr{border-collapse:collapse;border: 1px solid #ddd !important;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* APPS */
|
/* APPS */
|
||||||
|
|
||||||
.appinfo { margin: 1em 40px; }
|
.appinfo { margin: 1em 40px; }
|
||||||
#app-navigation {
|
#app-navigation {
|
||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
|
@ -139,11 +143,62 @@ input.userFilter {width: 200px;}
|
||||||
#app-navigation.appwarning:hover {
|
#app-navigation.appwarning:hover {
|
||||||
background: #fbb;
|
background: #fbb;
|
||||||
}
|
}
|
||||||
small.externalapp { color:#FFF; background-color:#BBB; font-weight:bold; font-size: 0.6em; margin: 0; padding: 0.1em 0.2em; border-radius: 3px;}
|
|
||||||
small.recommendedapp { color:#FFF; background-color:#888; font-weight:bold; font-size: 0.6em; margin: 0; padding: 0.1em 0.2em; border-radius: 3px;}
|
.recommendedapp {
|
||||||
small.externalapp.list, small.recommendedapp.list { position: absolute; right: 10px; top: 12px; }
|
font-size: 11px;
|
||||||
|
background-position: left center;
|
||||||
|
padding-left: 18px;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
span.version { margin-left:1em; margin-right:1em; color:#555; }
|
span.version { margin-left:1em; margin-right:1em; color:#555; }
|
||||||
|
|
||||||
|
#app-navigation .app-external,
|
||||||
|
.app-version,
|
||||||
|
.recommendedapp {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
|
||||||
|
filter: alpha(opacity=50);
|
||||||
|
opacity: .5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#apps-list {
|
||||||
|
position: relative;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.section {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.app-image {
|
||||||
|
float: left;
|
||||||
|
padding-right: 10px;
|
||||||
|
width: 80px;
|
||||||
|
height: 80px;
|
||||||
|
}
|
||||||
|
.app-image img {
|
||||||
|
max-width: 80px;
|
||||||
|
max-height: 80px;
|
||||||
|
}
|
||||||
|
.app-image-icon img {
|
||||||
|
background-color: #ccc;
|
||||||
|
width: 60px;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
.app-name,
|
||||||
|
.app-version,
|
||||||
|
.app-score,
|
||||||
|
.recommendedapp {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.app-description {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
.app-description pre {
|
||||||
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app-category-2 {
|
||||||
|
border-bottom: 1px solid #e8e8e8;
|
||||||
|
}
|
||||||
|
|
||||||
/* Transition to complete width! */
|
/* Transition to complete width! */
|
||||||
.app:hover, .app:active { max-width: inherit; }
|
.app:hover, .app:active { max-width: inherit; }
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Copyright (c) 2013 Lukas Reschke <lukas@statuscode.ch>
|
|
||||||
* This file is licensed under the Affero General Public License version 3 or
|
|
||||||
* later.
|
|
||||||
* See the COPYING-README file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Check if admin user
|
|
||||||
OC_Util::checkAdminUser();
|
|
||||||
|
|
||||||
// Set the content type to JS
|
|
||||||
header('Content-type: application/javascript');
|
|
||||||
|
|
||||||
// Disallow caching
|
|
||||||
header("Cache-Control: no-cache, must-revalidate");
|
|
||||||
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
|
|
||||||
|
|
||||||
$combinedApps = OC_App::listAllApps();
|
|
||||||
|
|
||||||
foreach($combinedApps as $app) {
|
|
||||||
echo("appData_".$app['id']."=".json_encode($app));
|
|
||||||
echo("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
echo ("var appid =".json_encode($_GET['appid']).";");
|
|
|
@ -1,225 +1,235 @@
|
||||||
/**
|
/* global Handlebars */
|
||||||
* Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
|
|
||||||
* Copyright (c) 2012, Thomas Tanghus <thomas@tanghus.net>
|
Handlebars.registerHelper('score', function() {
|
||||||
* This file is licensed under the Affero General Public License version 3 or later.
|
if(this.score) {
|
||||||
* See the COPYING-README file.
|
var score = Math.round( this.score / 10 );
|
||||||
*/
|
var imageName = 'rating/s' + score + '.png';
|
||||||
|
|
||||||
|
return new Handlebars.SafeString('<img src="' + OC.imagePath('core', imageName) + '">');
|
||||||
|
}
|
||||||
|
return new Handlebars.SafeString('');
|
||||||
|
});
|
||||||
|
|
||||||
OC.Settings = OC.Settings || {};
|
OC.Settings = OC.Settings || {};
|
||||||
OC.Settings.Apps = OC.Settings.Apps || {
|
OC.Settings.Apps = OC.Settings.Apps || {
|
||||||
setupGroupsSelect: function() {
|
setupGroupsSelect: function($elements) {
|
||||||
OC.Settings.setupGroupsSelect($('#group_select'), {
|
OC.Settings.setupGroupsSelect($elements, {
|
||||||
placeholder: t('core', 'All')
|
placeholder: t('core', 'All')
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
loadApp:function(app) {
|
|
||||||
var page = $('#app-content');
|
|
||||||
page.find('p.license').show();
|
|
||||||
page.find('span.name').text(app.name);
|
|
||||||
page.find('small.externalapp').text(app.internallabel);
|
|
||||||
if (app.version) {
|
|
||||||
page.find('span.version').text(app.version);
|
|
||||||
} else {
|
|
||||||
page.find('span.version').text('');
|
|
||||||
}
|
|
||||||
page.find('span.score').html(app.score);
|
|
||||||
page.find('p.description').text(app.description);
|
|
||||||
page.find('img.preview').attr('src', app.preview);
|
|
||||||
if (app.preview && app.preview.length) {
|
|
||||||
page.find('img.preview').show();
|
|
||||||
} else {
|
|
||||||
page.find('img.preview').hide();
|
|
||||||
}
|
|
||||||
page.find('small.externalapp').attr('style', 'visibility:visible');
|
|
||||||
page.find('span.author').text(app.author);
|
|
||||||
|
|
||||||
// FIXME licenses of downloaded apps go into app.licence, licenses of not-downloaded apps into app.license
|
State: {
|
||||||
var appLicense = '';
|
currentCategory: null,
|
||||||
if (typeof(app.licence) !== 'undefined') {
|
apps: null
|
||||||
appLicense = app.licence;
|
},
|
||||||
} else if (typeof(app.license) !== 'undefined') {
|
|
||||||
appLicense = app.license;
|
|
||||||
}
|
|
||||||
page.find('span.licence').text(appLicense);
|
|
||||||
|
|
||||||
var userDocumentation = false;
|
loadCategories: function() {
|
||||||
var adminDocumentation = false;
|
var categories = [
|
||||||
if (typeof(app.documentation) !== 'undefined') {
|
{displayName: 'Enabled', id: '0'}
|
||||||
if (typeof(app.documentation.user) !== 'undefined') {
|
];
|
||||||
userDocumentation = true;
|
|
||||||
page.find('span.userDocumentation').html("<a id='userDocumentation' href='" + app.documentation.user + "'>" + t('settings', 'User Documentation') + "</a>");
|
var source = $("#categories-template").html();
|
||||||
page.find('p.documentation').show();
|
var template = Handlebars.compile(source);
|
||||||
}
|
var html = template(categories);
|
||||||
else {
|
$('#apps-categories').html(html);
|
||||||
page.find('span.userDocumentation').empty();
|
|
||||||
userDocumentation = false;
|
OC.Settings.Apps.loadCategory(0);
|
||||||
}
|
|
||||||
if (typeof(app.documentation.admin) !== 'undefined') {
|
$.ajax(OC.generateUrl('settings/apps/categories'), {
|
||||||
adminDocumentation = true;
|
data:{},
|
||||||
page.find('span.adminDocumentation').html("<a id='adminDocumentation' href='" + app.documentation.admin + "'>" + t('settings', 'Admin Documentation') + "</a>");
|
type:'GET',
|
||||||
page.find('p.documentation').show();
|
success:function (jsondata) {
|
||||||
}
|
var html = template(jsondata);
|
||||||
else {
|
$('#apps-categories').html(html);
|
||||||
page.find('span.adminDocumentation').empty();
|
$('#app-category-' + OC.Settings.Apps.State.currentCategory).addClass('active');
|
||||||
adminDocumentation = false;
|
},
|
||||||
|
complete: function() {
|
||||||
|
$('#app-navigation').removeClass('icon-loading');
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if(userDocumentation && adminDocumentation) {
|
},
|
||||||
page.find('span.comma').remove();
|
|
||||||
page.find('span.userDocumentation').after('<span class="comma">, </span>');
|
loadCategory: function(categoryId) {
|
||||||
}
|
if (OC.Settings.Apps.State.currentCategory === categoryId) {
|
||||||
else {
|
return;
|
||||||
page.find('span.comma').remove();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
$('#apps-list')
|
||||||
page.find('p.documentation').hide();
|
.addClass('icon-loading')
|
||||||
|
.html('');
|
||||||
|
$('#app-category-' + OC.Settings.Apps.State.currentCategory).removeClass('active');
|
||||||
|
$('#app-category-' + categoryId).addClass('active');
|
||||||
|
OC.Settings.Apps.State.currentCategory = categoryId;
|
||||||
|
|
||||||
|
$.ajax(OC.generateUrl('settings/apps/list?category={categoryId}', {
|
||||||
|
categoryId: categoryId
|
||||||
|
}), {
|
||||||
|
data:{},
|
||||||
|
type:'GET',
|
||||||
|
success:function (apps) {
|
||||||
|
OC.Settings.Apps.State.apps = _.indexBy(apps.apps, 'id');
|
||||||
|
var source = $("#app-template").html();
|
||||||
|
var template = Handlebars.compile(source);
|
||||||
|
|
||||||
|
_.each(apps.apps, function(app) {
|
||||||
|
OC.Settings.Apps.renderApp(app, template, null);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
complete: function() {
|
||||||
|
$('#apps-list').removeClass('icon-loading');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
renderApp: function(app, template, selector) {
|
||||||
|
if (!template) {
|
||||||
|
var source = $("#app-template").html();
|
||||||
|
template = Handlebars.compile(source);
|
||||||
|
}
|
||||||
|
if (typeof app === 'string') {
|
||||||
|
app = OC.Settings.Apps.State.apps[app];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof(app.website) !== 'undefined') {
|
var html = template(app);
|
||||||
page.find('p.website').show();
|
if (selector) {
|
||||||
page.find('a#websitelink').attr('href', app.website);
|
selector.html(html);
|
||||||
}
|
|
||||||
|
|
||||||
if (app.update !== false) {
|
|
||||||
page.find('input.update').show();
|
|
||||||
page.find('input.update').data('appid', app.id);
|
|
||||||
page.find('input.update').attr('value',t('settings', 'Update to {appversion}', {appversion:app.update}));
|
|
||||||
} else {
|
} else {
|
||||||
page.find('input.update').hide();
|
$('#apps-list').append(html);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (app.removable !== false && app.active === false) {
|
var page = $('#app-' + app.id);
|
||||||
page.find('a.uninstall').show();
|
|
||||||
page.find('a.uninstall').data('appid', app.id);
|
// image loading kung-fu
|
||||||
page.find('a.uninstall').attr('value', t('settings', 'Uninstall App'));
|
if (app.preview) {
|
||||||
} else {
|
var currentImage = new Image();
|
||||||
page.find('a.uninstall').hide();
|
currentImage.src = app.preview;
|
||||||
}
|
|
||||||
|
currentImage.onload = function() {
|
||||||
page.find('input.enable').show();
|
page.find('.app-image')
|
||||||
page.find('input.enable').val((app.active) ? t('settings', 'Disable') : t('settings', 'Enable'));
|
.append(this)
|
||||||
page.find('input.enable').data('appid', app.id);
|
.fadeIn();
|
||||||
page.find('input.enable').data('active', app.active);
|
};
|
||||||
if (app.internal === false) {
|
|
||||||
page.find('span.score').show();
|
|
||||||
page.find('p.appstore').show();
|
|
||||||
page.find('a#appstorelink').attr('href', 'http://apps.owncloud.com/content/show.php?content=' + app.id);
|
|
||||||
page.find('small.externalapp').hide();
|
|
||||||
} else {
|
|
||||||
page.find('p.appslink').hide();
|
|
||||||
page.find('span.score').hide();
|
|
||||||
}
|
|
||||||
if (typeof($('#app-navigation ul li[data-id="'+app.id+'"]').data('errormsg')) !== "undefined") {
|
|
||||||
page.find(".warning").show();
|
|
||||||
page.find(".warning").text($('#app-navigation ul li[data-id="'+app.id+'"]').data('errormsg'));
|
|
||||||
} else {
|
|
||||||
page.find(".warning").hide();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set group select properly
|
||||||
if(OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
|
if(OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
|
||||||
OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
|
OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
|
||||||
page.find("#groups_enable").hide();
|
page.find(".groups-enable").hide();
|
||||||
page.find("label[for='groups_enable']").hide();
|
page.find("label[for='groups_enable-"+app.id+"']").hide();
|
||||||
page.find("#groups_enable").attr('checked', null);
|
page.find(".groups-enable").attr('checked', null);
|
||||||
} else {
|
} else {
|
||||||
|
page.find('#group_select').val((app.groups || []).join(','));
|
||||||
if (app.active) {
|
if (app.active) {
|
||||||
if (app.groups.length) {
|
if (app.groups.length) {
|
||||||
OC.Settings.Apps.setupGroupsSelect();
|
OC.Settings.Apps.setupGroupsSelect(page.find('#group_select'));
|
||||||
$('#group_select').select2('val', app.groups || []);
|
page.find(".groups-enable").attr('checked','checked');
|
||||||
page.find("#groups_enable").attr('checked','checked');
|
|
||||||
} else {
|
} else {
|
||||||
page.find("#groups_enable").attr('checked', null);
|
page.find(".groups-enable").attr('checked', null);
|
||||||
}
|
}
|
||||||
page.find("#groups_enable").show();
|
page.find(".groups-enable").show();
|
||||||
page.find("label[for='groups_enable']").show();
|
page.find("label[for='groups_enable-"+app.id+"']").show();
|
||||||
} else {
|
} else {
|
||||||
page.find("#groups_enable").hide();
|
page.find(".groups-enable").hide();
|
||||||
page.find("label[for='groups_enable']").hide();
|
page.find("label[for='groups_enable-"+app.id+"']").hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
enableApp:function(appid, active, element, groups) {
|
|
||||||
|
isType: function(app, type){
|
||||||
|
return app.types && app.types.indexOf(type) !== -1;
|
||||||
|
},
|
||||||
|
|
||||||
|
enableApp:function(appId, active, element, groups) {
|
||||||
|
OC.Settings.Apps.hideErrorMessage(appId);
|
||||||
groups = groups || [];
|
groups = groups || [];
|
||||||
var appitem=$('#app-navigation ul li[data-id="'+appid+'"]');
|
var appItem = $('div#app-'+appId+'');
|
||||||
element.val(t('settings','Please wait....'));
|
element.val(t('settings','Please wait....'));
|
||||||
if(active && !groups.length) {
|
if(active && !groups.length) {
|
||||||
$.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appid},function(result) {
|
$.post(OC.filePath('settings','ajax','disableapp.php'),{appid:appId},function(result) {
|
||||||
if(!result || result.status !== 'success') {
|
if(!result || result.status !== 'success') {
|
||||||
if (result.data && result.data.message) {
|
if (result.data && result.data.message) {
|
||||||
OC.Settings.Apps.showErrorMessage(result.data.message);
|
OC.Settings.Apps.showErrorMessage(appId, result.data.message);
|
||||||
appitem.data('errormsg', result.data.message);
|
appItem.data('errormsg', result.data.message);
|
||||||
} else {
|
} else {
|
||||||
OC.Settings.Apps.showErrorMessage(t('settings', 'Error while disabling app'));
|
OC.Settings.Apps.showErrorMessage(appId, t('settings', 'Error while disabling app'));
|
||||||
appitem.data('errormsg', t('settings', 'Error while disabling app'));
|
appItem.data('errormsg', t('settings', 'Error while disabling app'));
|
||||||
}
|
}
|
||||||
element.val(t('settings','Disable'));
|
element.val(t('settings','Disable'));
|
||||||
appitem.addClass('appwarning');
|
appItem.addClass('appwarning');
|
||||||
}
|
} else {
|
||||||
else {
|
appItem.data('active',false);
|
||||||
appitem.data('active',false);
|
appItem.data('groups', '');
|
||||||
appitem.data('groups', '');
|
|
||||||
element.data('active',false);
|
element.data('active',false);
|
||||||
OC.Settings.Apps.removeNavigation(appid);
|
OC.Settings.Apps.removeNavigation(appId);
|
||||||
appitem.removeClass('active');
|
appItem.removeClass('active');
|
||||||
element.val(t('settings','Enable'));
|
element.val(t('settings','Enable'));
|
||||||
element.parent().find("#groups_enable").hide();
|
element.parent().find(".groups-enable").hide();
|
||||||
element.parent().find("label[for='groups_enable']").hide();
|
element.parent().find("#groups_enable-"+appId).hide();
|
||||||
var app = OC.get('appData_' + appid);
|
element.parent().find("label[for='groups_enable-"+appId+"']").hide();
|
||||||
app.active = false;
|
element.parent().find('#group_select').hide().val(null);
|
||||||
|
OC.Settings.Apps.State.apps[appId].active = false;
|
||||||
}
|
}
|
||||||
},'json');
|
},'json');
|
||||||
} else {
|
} else {
|
||||||
$.post(OC.filePath('settings','ajax','enableapp.php'),{appid: appid, groups: groups},function(result) {
|
$.post(OC.filePath('settings','ajax','enableapp.php'),{appid: appId, groups: groups},function(result) {
|
||||||
if(!result || result.status !== 'success') {
|
if(!result || result.status !== 'success') {
|
||||||
if (result.data && result.data.message) {
|
if (result.data && result.data.message) {
|
||||||
OC.Settings.Apps.showErrorMessage(result.data.message);
|
OC.Settings.Apps.showErrorMessage(appId, result.data.message);
|
||||||
appitem.data('errormsg', result.data.message);
|
appItem.data('errormsg', result.data.message);
|
||||||
} else {
|
} else {
|
||||||
OC.Settings.Apps.showErrorMessage(t('settings', 'Error while enabling app'));
|
OC.Settings.Apps.showErrorMessage(appId, t('settings', 'Error while enabling app'));
|
||||||
appitem.data('errormsg', t('settings', 'Error while disabling app'));
|
appItem.data('errormsg', t('settings', 'Error while disabling app'));
|
||||||
}
|
}
|
||||||
element.val(t('settings','Enable'));
|
element.val(t('settings','Enable'));
|
||||||
appitem.addClass('appwarning');
|
appItem.addClass('appwarning');
|
||||||
} else {
|
} else {
|
||||||
OC.Settings.Apps.addNavigation(appid);
|
OC.Settings.Apps.addNavigation(appId);
|
||||||
appitem.data('active',true);
|
appItem.data('active',true);
|
||||||
element.data('active',true);
|
element.data('active',true);
|
||||||
appitem.addClass('active');
|
appItem.addClass('active');
|
||||||
element.val(t('settings','Disable'));
|
element.val(t('settings','Disable'));
|
||||||
var app = OC.get('appData_' + appid);
|
var app = OC.Settings.Apps.State.apps[appId];
|
||||||
app.active = true;
|
app.active = true;
|
||||||
|
|
||||||
if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
|
if (OC.Settings.Apps.isType(app, 'filesystem') || OC.Settings.Apps.isType(app, 'prelogin') ||
|
||||||
OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
|
OC.Settings.Apps.isType(app, 'authentication') || OC.Settings.Apps.isType(app, 'logging')) {
|
||||||
element.parent().find("#groups_enable").hide();
|
element.parent().find(".groups-enable").attr('checked', null);
|
||||||
element.parent().find("label[for='groups_enable']").hide();
|
element.parent().find("#groups_enable-"+appId).hide();
|
||||||
|
element.parent().find("label[for='groups_enable-"+appId+"']").hide();
|
||||||
|
element.parent().find(".groups-enable").hide();
|
||||||
|
element.parent().find("#groups_enable-"+appId).hide();
|
||||||
|
element.parent().find("label[for='groups_enable-"+appId+"']").hide();
|
||||||
|
element.parent().find('#group_select').hide().val(null);
|
||||||
} else {
|
} else {
|
||||||
element.parent().find("#groups_enable").show();
|
element.parent().find("#groups_enable-"+appId).show();
|
||||||
element.parent().find("label[for='groups_enable']").show();
|
element.parent().find("label[for='groups_enable-"+appId+"']").show();
|
||||||
if (groups) {
|
if (groups) {
|
||||||
appitem.data('groups', JSON.stringify(groups));
|
appItem.data('groups', JSON.stringify(groups));
|
||||||
} else {
|
} else {
|
||||||
appitem.data('groups', '');
|
appItem.data('groups', '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},'json')
|
},'json')
|
||||||
.fail(function() {
|
.fail(function() {
|
||||||
OC.Settings.Apps.showErrorMessage(t('settings', 'Error while enabling app'));
|
OC.Settings.Apps.showErrorMessage(appId, t('settings', 'Error while enabling app'));
|
||||||
appitem.data('errormsg', t('settings', 'Error while enabling app'));
|
appItem.data('errormsg', t('settings', 'Error while enabling app'));
|
||||||
appitem.data('active',false);
|
appItem.data('active',false);
|
||||||
appitem.addClass('appwarning');
|
appItem.addClass('appwarning');
|
||||||
OC.Settings.Apps.removeNavigation(appid);
|
OC.Settings.Apps.removeNavigation(appId);
|
||||||
element.val(t('settings','Enable'));
|
element.val(t('settings','Enable'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
updateApp:function(appid, element) {
|
|
||||||
|
updateApp:function(appId, element) {
|
||||||
|
var oldButtonText = element.val();
|
||||||
element.val(t('settings','Updating....'));
|
element.val(t('settings','Updating....'));
|
||||||
$.post(OC.filePath('settings','ajax','updateapp.php'),{appid:appid},function(result) {
|
OC.Settings.Apps.hideErrorMessage(appId);
|
||||||
|
$.post(OC.filePath('settings','ajax','updateapp.php'),{appid:appId},function(result) {
|
||||||
if(!result || result.status !== 'success') {
|
if(!result || result.status !== 'success') {
|
||||||
OC.Settings.Apps.showErrorMessage(t('settings','Error while updating app'),t('settings','Error'));
|
OC.Settings.Apps.showErrorMessage(appId, t('settings','Error while updating app'));
|
||||||
element.val(t('settings','Update'));
|
element.val(oldButtonText);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
element.val(t('settings','Updated'));
|
element.val(t('settings','Updated'));
|
||||||
|
@ -227,42 +237,25 @@ OC.Settings.Apps = OC.Settings.Apps || {
|
||||||
}
|
}
|
||||||
},'json');
|
},'json');
|
||||||
},
|
},
|
||||||
uninstallApp:function(appid, element) {
|
|
||||||
|
uninstallApp:function(appId, element) {
|
||||||
|
OC.Settings.Apps.hideErrorMessage(appId);
|
||||||
element.val(t('settings','Uninstalling ....'));
|
element.val(t('settings','Uninstalling ....'));
|
||||||
$.post(OC.filePath('settings','ajax','uninstallapp.php'),{appid:appid},function(result) {
|
$.post(OC.filePath('settings','ajax','uninstallapp.php'),{appid:appId},function(result) {
|
||||||
if(!result || result.status !== 'success') {
|
if(!result || result.status !== 'success') {
|
||||||
OC.Settings.Apps.showErrorMessage(t('settings','Error while uninstalling app'),t('settings','Error'));
|
OC.Settings.Apps.showErrorMessage(appId, t('settings','Error while uninstalling app'));
|
||||||
element.val(t('settings','Uninstall'));
|
element.val(t('settings','Uninstall'));
|
||||||
} else {
|
} else {
|
||||||
OC.Settings.Apps.removeNavigation(appid);
|
OC.Settings.Apps.removeNavigation(appId);
|
||||||
var appItem = $('#app-navigation li').filterAttr('data-id', appid);
|
element.parent().fadeOut(function() {
|
||||||
appItem.removeClass('active');
|
element.remove();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},'json');
|
},'json');
|
||||||
},
|
},
|
||||||
|
|
||||||
insertApp:function(appdata) {
|
removeNavigation: function(appId){
|
||||||
var applist = $('#app-navigation ul li');
|
$.getJSON(OC.filePath('settings', 'ajax', 'navigationdetect.php'), {app: appId}).done(function(response){
|
||||||
var app =
|
|
||||||
$('<li data-id="' + appdata.id + '" data-type="external" data-installed="0">'
|
|
||||||
+ '<a class="app externalapp" href="' + OC.filePath('settings', 'apps', 'index.php') + '&appid=' + appdata.id+'">'
|
|
||||||
+ appdata.name+'</a><small class="externalapp list">3rd party</small></li>');
|
|
||||||
app.data('app', appdata);
|
|
||||||
var added = false;
|
|
||||||
applist.each(function() {
|
|
||||||
if(!parseInt($(this).data('installed')) && $(this).find('a').text().toLowerCase() > appdata.name.toLowerCase()) {
|
|
||||||
$(this).before(app);
|
|
||||||
added = true;
|
|
||||||
return false; // dang, remember this to get out of loop
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if(!added) {
|
|
||||||
applist.last().after(app);
|
|
||||||
}
|
|
||||||
return app;
|
|
||||||
},
|
|
||||||
removeNavigation: function(appid){
|
|
||||||
$.getJSON(OC.filePath('settings', 'ajax', 'navigationdetect.php'), {app: appid}).done(function(response){
|
|
||||||
if(response.status === 'success'){
|
if(response.status === 'success'){
|
||||||
var navIds=response.nav_ids;
|
var navIds=response.nav_ids;
|
||||||
for(var i=0; i< navIds.length; i++){
|
for(var i=0; i< navIds.length; i++){
|
||||||
|
@ -310,107 +303,87 @@ OC.Settings.Apps = OC.Settings.Apps || {
|
||||||
.animate({opacity: 1})
|
.animate({opacity: 1})
|
||||||
.animate({opacity: 0.75});
|
.animate({opacity: 0.75});
|
||||||
|
|
||||||
if (!SVGSupport() && entry.icon.match(/\.svg$/i)) {
|
if (!OC.Util.hasSVGSupport() && entry.icon.match(/\.svg$/i)) {
|
||||||
$(img).addClass('svg');
|
$(img).addClass('svg');
|
||||||
replaceSVG();
|
OC.Util.replaceSVG();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
showErrorMessage: function(message) {
|
|
||||||
$('.appinfo .warning').show();
|
showErrorMessage: function(appId, message) {
|
||||||
$('.appinfo .warning').text(message);
|
$('div#app-'+appId+' .warning')
|
||||||
|
.show()
|
||||||
|
.text(message);
|
||||||
},
|
},
|
||||||
isType: function(app, type){
|
|
||||||
return app.types && app.types.indexOf(type) !== -1;
|
hideErrorMessage: function(appId) {
|
||||||
|
$('div#app-'+appId+' .warning')
|
||||||
|
.hide()
|
||||||
|
.text('');
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function () {
|
||||||
$('#app-navigation ul li').each(function(index,li){
|
OC.Settings.Apps.loadCategories();
|
||||||
var app = OC.get('appData_'+$(li).data('id'));
|
|
||||||
if (app) {
|
$(document).on('click', 'ul#apps-categories li', function () {
|
||||||
app.groups= $(li).data('groups') || [];
|
var categoryId = $(this).data('categoryId');
|
||||||
}
|
OC.Settings.Apps.loadCategory(categoryId);
|
||||||
$(li).data('app',app);
|
|
||||||
$(this).find('span.hidden').remove();
|
|
||||||
});
|
|
||||||
$('#app-navigation ul li').keydown(function(event) {
|
|
||||||
if (event.which === 13 || event.which === 32) {
|
|
||||||
$(event.target).click();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$(document).on('click', '#app-navigation', function(event){
|
$(document).on('click', '#apps-list input.enable', function () {
|
||||||
var tgt = $(event.target);
|
var appId = $(this).data('appid');
|
||||||
if (tgt.is('li') || tgt.is('a')) {
|
|
||||||
var item = tgt.is('li') ? $(tgt) : $(tgt).parent();
|
|
||||||
var app = item.data('app');
|
|
||||||
OC.Settings.Apps.loadApp(app);
|
|
||||||
$('#app-navigation .selected').removeClass('selected');
|
|
||||||
item.addClass('selected');
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$('#app-content input.enable').click(function(){
|
|
||||||
var element = $(this);
|
var element = $(this);
|
||||||
var appid=$(this).data('appid');
|
var active = $(this).data('active');
|
||||||
var active=$(this).data('active');
|
|
||||||
if(appid) {
|
OC.Settings.Apps.enableApp(appId, active, element);
|
||||||
OC.Settings.Apps.enableApp(appid, active, element);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
$('#app-content input.update').click(function(){
|
|
||||||
|
$(document).on('click', '#apps-list input.uninstall', function () {
|
||||||
|
var appId = $(this).data('appid');
|
||||||
var element = $(this);
|
var element = $(this);
|
||||||
var appid=$(this).data('appid');
|
|
||||||
if(appid) {
|
OC.Settings.Apps.uninstallApp(appId, element);
|
||||||
OC.Settings.Apps.updateApp(appid, element);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
$('#app-content a.uninstall').click(function(){
|
|
||||||
|
$(document).on('click', '#apps-list input.update', function () {
|
||||||
|
var appId = $(this).data('appid');
|
||||||
var element = $(this);
|
var element = $(this);
|
||||||
var appid=$(this).data('appid');
|
|
||||||
if(appid) {
|
OC.Settings.Apps.updateApp(appId, element);
|
||||||
OC.Settings.Apps.uninstallApp(appid, element);
|
});
|
||||||
|
|
||||||
|
$(document).on('change', '#group_select', function() {
|
||||||
|
var element = $(this).parent().find('input.enable');
|
||||||
|
var groups = $(this).val();
|
||||||
|
if (groups && groups !== '') {
|
||||||
|
groups = groups.split(',');
|
||||||
|
} else {
|
||||||
|
groups = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
var appId = element.data('appid');
|
||||||
|
if (appId) {
|
||||||
|
OC.Settings.Apps.enableApp(appId, false, element, groups);
|
||||||
|
OC.Settings.Apps.State.apps[appId].groups = groups;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#group_select').change(function(ev) {
|
$(document).on('change', ".groups-enable", function() {
|
||||||
var element = $('#app-content input.enable');
|
var $select = $(this).parent().find('#group_select');
|
||||||
// getting an array of values from select2
|
|
||||||
var groups = ev.val || [];
|
|
||||||
var appid = element.data('appid');
|
|
||||||
if (appid) {
|
|
||||||
OC.Settings.Apps.enableApp(appid, false, element, groups);
|
|
||||||
var li = $('[data-id="'+appid+'"]');
|
|
||||||
var app = OC.get('appData_' + $(li).data('id'));
|
|
||||||
app.groups = groups;
|
|
||||||
li.data('groups', groups);
|
|
||||||
li.attr('data-groups', JSON.stringify(groups));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if(appid) {
|
|
||||||
var item = $('#app-navigation ul li[data-id="'+appid+'"]');
|
|
||||||
if(item) {
|
|
||||||
item.trigger('click');
|
|
||||||
item.addClass('active');
|
|
||||||
$('#app-navigation').animate({scrollTop: item.offset().top-70}, 'slow','swing');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$("#groups_enable").change(function() {
|
|
||||||
var $select = $('#group_select');
|
|
||||||
$select.val('');
|
$select.val('');
|
||||||
|
|
||||||
if (this.checked) {
|
if (this.checked) {
|
||||||
OC.Settings.Apps.setupGroupsSelect();
|
OC.Settings.Apps.setupGroupsSelect($select);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
$select.select2('destroy');
|
$select.select2('destroy');
|
||||||
}
|
}
|
||||||
|
|
||||||
$select.change();
|
$select.change();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -69,10 +69,12 @@ $this->create('settings_cert_post', '/settings/ajax/addRootCertificate')
|
||||||
$this->create('settings_cert_remove', '/settings/ajax/removeRootCertificate')
|
$this->create('settings_cert_remove', '/settings/ajax/removeRootCertificate')
|
||||||
->actionInclude('settings/ajax/removeRootCertificate.php');
|
->actionInclude('settings/ajax/removeRootCertificate.php');
|
||||||
// apps
|
// apps
|
||||||
$this->create('settings_ajax_apps_ocs', '/settings/ajax/apps/ocs.php')
|
|
||||||
->actionInclude('settings/ajax/apps/ocs.php');
|
|
||||||
$this->create('settings_ajax_enableapp', '/settings/ajax/enableapp.php')
|
$this->create('settings_ajax_enableapp', '/settings/ajax/enableapp.php')
|
||||||
->actionInclude('settings/ajax/enableapp.php');
|
->actionInclude('settings/ajax/enableapp.php');
|
||||||
|
$this->create('settings_ajax_load_app_categories', '/settings/apps/categories')
|
||||||
|
->actionInclude('settings/ajax/apps/categories.php');
|
||||||
|
$this->create('settings_ajax_load_apps', '/settings/apps/list')
|
||||||
|
->actionInclude('settings/ajax/apps/index.php');
|
||||||
$this->create('settings_ajax_disableapp', '/settings/ajax/disableapp.php')
|
$this->create('settings_ajax_disableapp', '/settings/ajax/disableapp.php')
|
||||||
->actionInclude('settings/ajax/disableapp.php');
|
->actionInclude('settings/ajax/disableapp.php');
|
||||||
$this->create('settings_ajax_updateapp', '/settings/ajax/updateapp.php')
|
$this->create('settings_ajax_updateapp', '/settings/ajax/updateapp.php')
|
||||||
|
@ -81,8 +83,6 @@ $this->create('settings_ajax_uninstallapp', '/settings/ajax/uninstallapp.php')
|
||||||
->actionInclude('settings/ajax/uninstallapp.php');
|
->actionInclude('settings/ajax/uninstallapp.php');
|
||||||
$this->create('settings_ajax_navigationdetect', '/settings/ajax/navigationdetect.php')
|
$this->create('settings_ajax_navigationdetect', '/settings/ajax/navigationdetect.php')
|
||||||
->actionInclude('settings/ajax/navigationdetect.php');
|
->actionInclude('settings/ajax/navigationdetect.php');
|
||||||
$this->create('apps_custom', '/settings/js/apps-custom.js')
|
|
||||||
->actionInclude('settings/js/apps-custom.php');
|
|
||||||
// admin
|
// admin
|
||||||
$this->create('settings_ajax_getlog', '/settings/ajax/getlog.php')
|
$this->create('settings_ajax_getlog', '/settings/ajax/getlog.php')
|
||||||
->actionInclude('settings/ajax/getlog.php');
|
->actionInclude('settings/ajax/getlog.php');
|
||||||
|
|
|
@ -1,65 +1,82 @@
|
||||||
<?php /**
|
<script id="categories-template" type="text/x-handlebars-template">
|
||||||
* Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
|
{{#each this}}
|
||||||
* This file is licensed under the Affero General Public License version 3 or later.
|
<li id="app-category-{{id}}" data-category-id="{{id}}"><a>{{displayName}}</a></li>
|
||||||
* See the COPYING-README file.
|
{{/each}}
|
||||||
*/?>
|
|
||||||
<script type="text/javascript"
|
|
||||||
src="<?php print_unescaped(OC_Helper::linkToRoute('apps_custom'));?>?appid=<?php p($_['appid']); ?>"></script>
|
|
||||||
<script type="text/javascript" src="<?php print_unescaped(OC_Helper::linkTo('settings/js', 'apps.js'));?>"></script>
|
|
||||||
|
|
||||||
<div id="app-navigation">
|
<?php if(OC_Config::getValue('appstoreenabled', true) === true): ?>
|
||||||
<ul class="applist">
|
<li>
|
||||||
<?php if(OC_Config::getValue('appstoreenabled', true) === true): ?>
|
<a class="app-external" target="_blank" href="http://apps.owncloud.com/?xsortmode=high"><?php p($l->t('More apps'));?> …</a>
|
||||||
<li>
|
</li>
|
||||||
<a class="app-external" target="_blank" href="http://owncloud.org/dev"><?php p($l->t('Add your App'));?> …</a>
|
<li>
|
||||||
</li>
|
<a class="app-external" target="_blank" href="http://owncloud.org/dev"><?php p($l->t('Add your app'));?> …</a>
|
||||||
<?php endif; ?>
|
</li>
|
||||||
|
<?php endif; ?>
|
||||||
|
</script>
|
||||||
|
|
||||||
<?php foreach($_['apps'] as $app):?>
|
<script id="app-template" type="text/x-handlebars">
|
||||||
<li <?php if($app['active']) print_unescaped('class="active"')?> data-id="<?php p($app['id']) ?>" data-groups="<?php p($app['groups']) ?>"
|
<div class="section" id="app-{{id}}">
|
||||||
<?php if ( isset( $app['ocs_id'] ) ) { print_unescaped("data-id-ocs=\"{".OC_Util::sanitizeHTML($app['ocs_id'])."}\""); } ?>
|
{{#if preview}}
|
||||||
data-type="<?php p($app['internal'] ? 'internal' : 'external') ?>" data-installed="1">
|
<div class="app-image{{#if previewAsIcon}} app-image-icon{{/if}} hidden">
|
||||||
<a class="app<?php if(!$app['internal']) p(' externalapp') ?>"
|
</div>
|
||||||
href="?appid=<?php p($app['id']) ?>"><?php p($app['name']) ?></a>
|
{{/if}}
|
||||||
<?php if(!$app['internal'])
|
<h2 class="app-name"><a href="{{detailpage}}" target="_blank">{{name}}</a></h2>
|
||||||
print_unescaped('<small class="'.OC_Util::sanitizeHTML($app['internalclass']).' list">'.OC_Util::sanitizeHTML($app['internallabel']).'</small>') ?>
|
<div class="app-version"> {{version}}</div>
|
||||||
</li>
|
<div class="app-author"><?php p($l->t('by')); ?> {{author}}
|
||||||
<?php endforeach;?>
|
{{#if license}}
|
||||||
|
({{license}}-<?php p($l->t('licensed')); ?>)
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
{{#if score}}
|
||||||
|
<div class="app-score">{{{score}}}</div>
|
||||||
|
{{/if}}
|
||||||
|
{{#if internalclass}}
|
||||||
|
<div class="{{internalclass}} icon-checkmark">{{internallabel}}</div>
|
||||||
|
{{/if}}
|
||||||
|
<div class="app-detailpage"></div>
|
||||||
|
<div class="app-description"><pre>{{description}}</pre></div>
|
||||||
|
<!--<div class="app-changed">{{changed}}</div>-->
|
||||||
|
{{#if documentation}}
|
||||||
|
<p class="documentation">
|
||||||
|
<?php p($l->t("Documentation:"));?>
|
||||||
|
{{#if documentation.user}}
|
||||||
|
<span class="userDocumentation appslink">
|
||||||
|
<a id='userDocumentation' href='{{documentation.user}}' target="_blank"><?php p($l->t("User Documentation"));?></a>
|
||||||
|
</span>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if documentation.admin}}
|
||||||
|
<span class="adminDocumentation appslink">
|
||||||
|
<a id='adminDocumentation' href='{{documentation.admin}}' target="_blank"><?php p($l->t("Admin Documentation"));?></a>
|
||||||
|
</span>
|
||||||
|
{{/if}}
|
||||||
|
</p>
|
||||||
|
{{/if}}
|
||||||
|
{{#if update}}
|
||||||
|
<input class="update" type="submit" value="<?php p($l->t('Update to %s', array('{{update}}'))); ?>" data-appid="{{id}}" />
|
||||||
|
{{/if}}
|
||||||
|
{{#if active}}
|
||||||
|
<input class="enable" type="submit" data-appid="{{id}}" data-active="true" value="<?php p($l->t("Disable"));?>"/>
|
||||||
|
<input type="checkbox" class="groups-enable" id="groups_enable-{{id}}"/>
|
||||||
|
<label for="groups_enable-{{id}}"><?php p($l->t('Enable only for specific groups')); ?></label>
|
||||||
|
<br />
|
||||||
|
<input type="hidden" id="group_select" title="<?php p($l->t('All')); ?>" style="width: 200px">
|
||||||
|
{{else}}
|
||||||
|
<input class="enable" type="submit" data-appid="{{id}}" data-active="false" value="<?php p($l->t("Enable"));?>"/>
|
||||||
|
{{/if}}
|
||||||
|
{{#if canUnInstall}}
|
||||||
|
<input class="uninstall" type="submit" value="<?php p($l->t('Uninstall App')); ?>" data-appid="{{id}}" />
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
<div class="warning hidden"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div id="app-navigation" class="icon-loading">
|
||||||
|
<ul id="apps-categories">
|
||||||
|
|
||||||
<?php if(OC_Config::getValue('appstoreenabled', true) === true): ?>
|
|
||||||
<li>
|
|
||||||
<a class="app-external" target="_blank" href="http://apps.owncloud.com"><?php p($l->t('More Apps'));?> …</a>
|
|
||||||
</li>
|
|
||||||
<?php endif; ?>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div id="app-content">
|
<div id="app-content">
|
||||||
<div class="appinfo">
|
<div id="apps-list" class="icon-loading"></div>
|
||||||
<h3><strong><span class="name"><?php p($l->t('Select an App'));?></span></strong><span
|
|
||||||
class="version"></span><small class="externalapp" style="visibility:hidden;"></small></h3>
|
|
||||||
<span class="score"></span>
|
|
||||||
<p class="description"></p>
|
|
||||||
<p class="documentation hidden">
|
|
||||||
<?php p($l->t("Documentation:"));?>
|
|
||||||
<span class="userDocumentation appslink"></span>
|
|
||||||
<span class="adminDocumentation appslink"></span>
|
|
||||||
</p>
|
|
||||||
<img src="" class="preview hidden" />
|
|
||||||
<p class="appslink appstore hidden"><a id="appstorelink" href="#" target="_blank"><?php
|
|
||||||
p($l->t('See application page at apps.owncloud.com'));?></a></p>
|
|
||||||
<p class="appslink website hidden"><a id="websitelink" href="#" target="_blank"><?php
|
|
||||||
p($l->t('See application website'));?></a></p>
|
|
||||||
<p class="license hidden"><?php
|
|
||||||
print_unescaped($l->t('<span class="licence"></span>-licensed by <span class="author"></span>'));?></p>
|
|
||||||
<input class="enable hidden" type="submit" />
|
|
||||||
<input class="update hidden" type="submit" value="<?php p($l->t('Update')); ?>" />
|
|
||||||
<a class="uninstall hidden" href="#"><?php p($l->t('Uninstall')); ?></a>
|
|
||||||
<br />
|
|
||||||
<input class="hidden" type="checkbox" id="groups_enable"/>
|
|
||||||
<label class="hidden" for="groups_enable"><?php p($l->t('Enable only for specific groups')); ?></label>
|
|
||||||
<br />
|
|
||||||
<input type="hidden" id="group_select" title="<?php p($l->t('All')); ?>" style="width: 200px">
|
|
||||||
|
|
||||||
<div class="warning hidden"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|