Added python backend

This commit is contained in:
Marc Aymerich 2015-04-16 13:15:21 +00:00
parent ddefad503a
commit 9903fffda3
38 changed files with 271 additions and 1886 deletions

20
TODO.md
View file

@ -175,9 +175,6 @@ require_once(/etc/moodles/.$moodle_host.config.php);``` moodle/drupl
* allow empty metric pack for default rates? changes on rating algo * allow empty metric pack for default rates? changes on rating algo
# don't produce lines with cost == 0 or quantity 0 ? maybe minimal quantity for billing? like 0.1 ? or minimal price? per line or per bill? # don't produce lines with cost == 0 or quantity 0 ? maybe minimal quantity for billing? like 0.1 ? or minimal price? per line or per bill?
# DOMINI REGISTRE MIGRATION SCRIPTS
# IMPORTANT delete domain xina: missing FROM-clause entry for table "t3" LINE 1: SELECT (CONCAT(T3.name, domains_domain.name)) AS "structured...
# lines too long on invoice, double lines or cut, and make margin wider # lines too long on invoice, double lines or cut, and make margin wider
* PHP_TIMEOUT env variable in sync with fcgid idle timeout * PHP_TIMEOUT env variable in sync with fcgid idle timeout
http://foaa.de/old-blog/2010/11/php-apache-and-fastcgi-a-comprehensive-overview/trackback/index.html#pni-top0 http://foaa.de/old-blog/2010/11/php-apache-and-fastcgi-a-comprehensive-overview/trackback/index.html#pni-top0
@ -188,8 +185,6 @@ require_once(/etc/moodles/.$moodle_host.config.php);``` moodle/drupl
* TODO raise404, here and everywhere * TODO raise404, here and everywhere
* update service orders on a celery task? because it take alot * update service orders on a celery task? because it take alot
# billline quantity eval('10x100') instead of miningless description '(10*100)' line.verbose_quantity
# FIXME do more test, make sure billed until doesn't get uodated whhen services are billed with les metric, and don't upgrade billed_until when undoing under this circumstances # FIXME do more test, make sure billed until doesn't get uodated whhen services are billed with les metric, and don't upgrade billed_until when undoing under this circumstances
* line 513: change threshold and one time service metric change should update last value if not billed, only record for recurring invoicing. postpay services should store the last metric for pricing period. * line 513: change threshold and one time service metric change should update last value if not billed, only record for recurring invoicing. postpay services should store the last metric for pricing period.
* add ini, end dates on bill lines and breakup quanity into size(defaut:1) and metric * add ini, end dates on bill lines and breakup quanity into size(defaut:1) and metric
@ -201,23 +196,14 @@ require_once(/etc/moodles/.$moodle_host.config.php);``` moodle/drupl
* write down insights * write down insights
# use english on services defs and so on, an translate them on render time
python3 manage.py dumpdata services.Service --indent 4 --natural
* websites directives get_location() and use it on last change view validation stage to compare with contents.location and also on the backend ? * websites directives get_location() and use it on last change view validation stage to compare with contents.location and also on the backend ?
* modeladmin Default filter + search isn't working, prepend filter when searching * modeladmin Default filter + search isn't working, prepend filter when searching
* create service help templates based on urlqwargs with the most basic services. * create service help templates based on urlqwargs with the most basic services.
# TDOO Base price: domini propi (all domains) + extra for other domains
# IMPORTANT op.instance = copy.deepcopy(instance) ValueError: Cannot assign "<SaaS: blog@WordPressService>": "SaaS" instance isn't saved in the database.
# Separate operation from models !! BackendOperation and Operation
Translation Translation
----------- -----------
mkdir locale mkdir locale
django-admin.py makemessages -l ca django-admin.py makemessages -l ca
django-admin.py compilemessages -l ca django-admin.py compilemessages -l ca
@ -254,7 +240,7 @@ https://code.djangoproject.com/ticket/24576
# FIXME what to do when deleting accounts? set fk null and fill a username charfield? issues, invoices.. we whant all this to go away? # FIXME what to do when deleting accounts? set fk null and fill a username charfield? issues, invoices.. we whant all this to go away?
* implement delete All related services * implement delete All related services
# FIXME address name change does not remove old one :P, readonly, perhaps we can regenerate all addresses using backend.prepare()? # FIXME address name change does not remove old one :P, readonly or perhaps we can regenerate all addresses using backend.prepare()?
* read https://docs.djangoproject.com/en/dev/releases/1.8/ and fix deprecation warnings * read https://docs.djangoproject.com/en/dev/releases/1.8/ and fix deprecation warnings
* remove admin object display_links , like contents webapps * remove admin object display_links , like contents webapps
@ -281,7 +267,6 @@ https://code.djangoproject.com/ticket/24576
* MultiCHoiceField proper serialization * MultiCHoiceField proper serialization
# Apache restart fails: detect if appache running, and execute start # Apache restart fails: detect if appache running, and execute start
# Change crons, create cron for deleted webapps and users
* UNIFY PHP FPM settings name * UNIFY PHP FPM settings name
# virtualhost name: name-account? # virtualhost name: name-account?
* add a delay to changes on the webserver apache to no overwelm it with backend executions? * add a delay to changes on the webserver apache to no overwelm it with backend executions?
@ -293,5 +278,6 @@ https://code.djangoproject.com/ticket/24576
* rename resource.monitors to resource.backends ? * rename resource.monitors to resource.backends ?
* abstract model classes enabling overriding? * abstract model classes enabling overriding?
# Ignore superusers & co on billing # Ignore superusers & co on billing: list filter doesn't work nor ignore detection
# bill.totals make it 100% computed? # bill.totals make it 100% computed?
* joomla: wget https://github.com/joomla/joomla-cms/releases/download/3.4.1/Joomla_3.4.1-Stable-Full_Package.tar.gz -O - | tar xvfz -

View file

@ -14,6 +14,8 @@ from django.utils.html import escape
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.views.decorators.debug import sensitive_post_parameters from django.views.decorators.debug import sensitive_post_parameters
from ..utils.python import random_ascii
from .forms import AdminPasswordChangeForm from .forms import AdminPasswordChangeForm
#from django.contrib.auth.forms import AdminPasswordChangeForm #from django.contrib.auth.forms import AdminPasswordChangeForm
from .utils import set_url_query, action_to_view from .utils import set_url_query, action_to_view
@ -243,6 +245,7 @@ class ChangePasswordAdminMixin(object):
'original': user, 'original': user,
'save_as': False, 'save_as': False,
'show_save': True, 'show_save': True,
'password': random_ascii(10),
} }
context.update(admin.site.each_context(request)) context.update(admin.site.each_context(request))
return TemplateResponse(request, return TemplateResponse(request,

View file

@ -144,7 +144,7 @@ class MailmanBackend(ServiceController):
'address_domain': mail_list.address_domain, 'address_domain': mail_list.address_domain,
'address_regex': '\|'.join(self.addresses), 'address_regex': '\|'.join(self.addresses),
'admin': mail_list.admin_email, 'admin': mail_list.admin_email,
'mailman_root': settings.LISTS_MAILMAN_ROOT_PATH, 'mailman_root': settings.LISTS_MAILMAN_ROOT_DIR,
}) })
return replace(context, "'", '"') return replace(context, "'", '"')

View file

@ -23,8 +23,8 @@ LISTS_MAILMAN_POST_LOG_PATH = getattr(settings, 'LISTS_MAILMAN_POST_LOG_PATH',
) )
LISTS_MAILMAN_ROOT_PATH = getattr(settings, 'LISTS_MAILMAN_ROOT_PATH', LISTS_MAILMAN_ROOT_DIR = getattr(settings, 'LISTS_MAILMAN_ROOT_DIR',
'/var/lib/mailman/' '/var/lib/mailman'
) )

View file

@ -406,7 +406,7 @@ class PostfixMailscannerTraffic(ServiceMonitor):
except KeyError: except KeyError:
pass pass
else: else:
targets[req_id] = (username, None) targets[req_id] = (username, 0)
reverse[username].add(req_id) reverse[username].add(req_id)
# Look for the mail size and count the number of recipients of each email # Look for the mail size and count the number of recipients of each email
else: else:
@ -438,7 +438,7 @@ class PostfixMailscannerTraffic(ServiceMonitor):
except IOError as e: except IOError as e:
sys.stderr.write(e) sys.stderr.write(e)
for username, opts in users.items(): for username, opts in users.iteritems():
size = 0 size = 0
for req_id in reverse[username]: for req_id in reverse[username]:
size += targets[req_id][1] * counter.get(req_id, 0) size += targets[req_id][1] * counter.get(req_id, 0)

View file

@ -23,13 +23,12 @@ STATE_COLORS = {
} }
class RouteAdmin(admin.ModelAdmin): class RouteAdmin(admin.ModelAdmin):
list_display = [ list_display = (
'backend', 'host', 'match', 'display_model', 'display_actions', 'is_active' 'backend', 'host', 'match', 'display_model', 'display_actions', 'is_active'
] )
list_editable = ['host', 'match', 'is_active'] list_editable = ('host', 'match', 'is_active')
list_filter = ['host', 'is_active', 'backend'] list_filter = ('host', 'is_active', 'backend')
ordering = ('backend',) ordering = ('backend',)
BACKEND_HELP_TEXT = { BACKEND_HELP_TEXT = {

View file

@ -149,24 +149,25 @@ class Route(models.Model):
@classmethod @classmethod
def get_servers(cls, operation, **kwargs): def get_servers(cls, operation, **kwargs):
cache = kwargs.get('cache', {}) cache = kwargs.get('cache', {})
if not cache:
for route in cls.objects.filter(is_active=True).select_related('host'):
for action in route.backend_class.get_actions():
key = (route.backend, action)
try:
cache[key].append(route)
except KeyError:
cache[key] = [route]
servers = [] servers = []
backend_cls = operation.backend backend_cls = operation.backend
key = (backend_cls.get_name(), operation.action) key = (backend_cls.get_name(), operation.action)
try: try:
routes = cache[key] routes = cache[key]
except KeyError: except KeyError:
cache[key] = [] pass
for route in cls.objects.filter(is_active=True, backend=backend_cls.get_name()): else:
for action in backend_cls.get_actions(): for route in routes:
_key = (route.backend, action) if route.matches(operation.instance):
try: servers.append(route.host)
cache[_key].append(route)
except KeyError:
cache[_key] = [route]
routes = cache[key]
for route in routes:
if route.matches(operation.instance):
servers.append(route.host)
return servers return servers
def clean(self): def clean(self):

View file

@ -27,6 +27,7 @@ class PlanAdmin(ExtendedModelAdmin):
class ContractedPlanAdmin(AccountAdminMixin, admin.ModelAdmin): class ContractedPlanAdmin(AccountAdminMixin, admin.ModelAdmin):
list_display = ('plan', 'account_link') list_display = ('plan', 'account_link')
list_filter = ('plan__name',) list_filter = ('plan__name',)
list_select_related = ('plan', 'account')
admin.site.register(Plan, PlanAdmin) admin.site.register(Plan, PlanAdmin)

View file

@ -13,6 +13,7 @@ from orchestra.admin.utils import insertattr, get_modeladmin, admin_link, admin_
from orchestra.contrib.orchestration.models import Route from orchestra.contrib.orchestration.models import Route
from orchestra.core import services from orchestra.core import services
from orchestra.utils import database_ready from orchestra.utils import database_ready
from orchestra.utils.functional import cached
from .actions import run_monitor from .actions import run_monitor
from .forms import ResourceForm from .forms import ResourceForm
@ -181,10 +182,11 @@ def resource_inline_factory(resources):
def total_form_count(self, resources=resources): def total_form_count(self, resources=resources):
return len(resources) return len(resources)
@cached
def get_queryset(self): def get_queryset(self):
""" Filter disabled resources """ """ Filter disabled resources """
queryset = super(ResourceInlineFormSet, self).get_queryset() queryset = super(ResourceInlineFormSet, self).get_queryset()
return queryset.filter(resource__is_active=True) return queryset.filter(resource__is_active=True).select_related('resource')
@cached_property @cached_property
def forms(self, resources=resources): def forms(self, resources=resources):

View file

@ -105,9 +105,10 @@ class ServiceHandler(plugins.Plugin, metaclass=plugins.PluginMount):
def get_ignore(self, instance): def get_ignore(self, instance):
if self.ignore_superusers: if self.ignore_superusers:
account = getattr(instance, 'account', instance) account = getattr(instance, 'account', instance)
if (account.type in settings.SERVICES_IGNORE_ACCOUNT_TYPE or if account.type in settings.SERVICES_IGNORE_ACCOUNT_TYPE:
'superuser' in settings.SERVICES_IGNORE_ACCOUNT_TYPE): return True
return True if 'superuser' in settings.SERVICES_IGNORE_ACCOUNT_TYPE and account.is_superuser:
return True
return False return False
def get_metric(self, instance): def get_metric(self, instance):

View file

@ -165,7 +165,7 @@ class Exim4Traffic(ServiceMonitor):
except IOError as e: except IOError as e:
sys.stderr.write(e) sys.stderr.write(e)
for username, opts in users.items(): for username, opts in users.iteritems():
__, object_id, size = opts __, object_id, size = opts
print object_id, size print object_id, size
""").format(**context) """).format(**context)

View file

@ -79,6 +79,11 @@ class WebAppAdmin(SelectPluginAdminMixin, AccountAdminMixin, ExtendedModelAdmin)
return webapp.type_instance.get_detail() return webapp.type_instance.get_detail()
display_detail.short_description = _("detail") display_detail.short_description = _("detail")
# def get_form(self, request, obj=None, **kwargs):
# form = super(WebAppAdmin, self).get_form(request, obj, **kwargs)
# if obj:
#
# def formfield_for_dbfield(self, db_field, **kwargs): # def formfield_for_dbfield(self, db_field, **kwargs):
# """ Make value input widget bigger """ # """ Make value input widget bigger """
# if db_field.name == 'type': # if db_field.name == 'type':

View file

@ -16,7 +16,7 @@ class WebAppViewSet(LogApiMixin, AccountApiMixin, viewsets.ModelViewSet):
def metadata(self, request): def metadata(self, request):
ret = super(WebAppViewSet, self).metadata(request) ret = super(WebAppViewSet, self).metadata(request)
names = [ names = [
'WEBAPPS_BASE_ROOT', 'WEBAPPS_TYPES', 'WEBAPPS_WEBAPP_OPTIONS', 'WEBAPPS_BASE_DIR', 'WEBAPPS_TYPES', 'WEBAPPS_WEBAPP_OPTIONS',
'WEBAPPS_PHP_DISABLED_FUNCTIONS', 'WEBAPPS_DEFAULT_TYPE' 'WEBAPPS_PHP_DISABLED_FUNCTIONS', 'WEBAPPS_DEFAULT_TYPE'
] ]
ret['settings'] = { ret['settings'] = {

View file

@ -99,7 +99,8 @@ class PHPBackend(WebAppServiceMixin, ServiceController):
if [[ $UPDATED_FPM -eq 1 ]]; then if [[ $UPDATED_FPM -eq 1 ]]; then
service php5-fpm reload service php5-fpm reload
fi fi
# Coordinate apache restart with apache backend # Coordinate apache restart with Apache2Backend
# FIXME race condition
locked=1 locked=1
state="$(grep -v 'PHPBackend' /dev/shm/restart.apache2)" || locked=0 state="$(grep -v 'PHPBackend' /dev/shm/restart.apache2)" || locked=0
echo -n "$state" > /dev/shm/restart.apache2 echo -n "$state" > /dev/shm/restart.apache2

View file

@ -0,0 +1,92 @@
import os
import textwrap
from django.template import Template, Context
from django.utils.translation import ugettext_lazy as _
from orchestra.contrib.orchestration import ServiceController, replace
from . import WebAppServiceMixin
from .. import settings
class PythonBackend(WebAppServiceMixin, ServiceController):
verbose_name = _("Python uWSGI")
default_route_match = "webapp.type.endswith('python')"
def save(self, webapp):
context = self.get_context(webapp)
self.create_webapp_dir(context)
self.set_under_construction(context)
self.save_uwsgi(webapp, context)
def delete(self, webapp):
context = self.get_context(webapp)
self.delete_uwsgi(webapp, context)
self.delete_webapp_dir(context)
def save_uwsgi(self, webapp, context):
self.append(textwrap.dedent("""\
uwsgi_config='%(uwsgi_config)s'
{
echo -e "${uwsgi_config}" | diff -N -I'^\s*;;' %(uwsgi_path)s -
} || {
echo -e "${uwsgi_config}" > %(uwsgi_path)s
UPDATED_UWSGI=1
}
ln -s %(uwsgi_path)s %(uwsgi_enabled)s
""") % context
)
def delete_uwsgi(self, webapp, context):
self.append("rm -f %(uwsgi_path)s" % context)
self.append("rm -f %(uwsgi_enabled)s" % context)
def get_uwsgi_ini(self, context):
# TODO switch to this http://uwsgi-docs.readthedocs.org/en/latest/Emperor.html
# TODO http://uwsgi-docs.readthedocs.org/en/latest/Changelog-1.9.1.html#on-demand-vassals
return textwrap.dedent("""\
[uwsgi]
plugins = python{python_version_number}
chdir = {app_path}
module = {app_name}.wsgi
chmod-socket = 660
stats = /run/uwsgi/%(deb-confnamespace)/%(deb-confname)/statsocket
vacuum = true
uid = {user}
gid = {group}
env = HOME={home}
harakiri = {timeout}
max-requests = {max_requests}
cheaper-algo = spare
cheaper = 1
workers = {workers}
cheaper-step = 1
cheaper-overload = 5"""
).format(context)
def update_uwsgi_context(self, webapp, context):
context.update({
'uwsgi_ini': self.get_uwsgi_ini(context),
'uwsgi_dir': settings.WEBAPPS_UWSGI_BASE_DIR,
'uwsgi_path': os.path.join(settings.WEBAPPS_UWSGI_BASE_DIR,
'apps-available/%s.ini'% context['app_name']),
'uwsgi_enabled': os.path.join(settings.WEBAPPS_UWSGI_BASE_DIR,
'apps-enabled/%s.ini'% context['app_name']),
})
return context
def get_context(self, webapp):
context = super(PHPBackend, self).get_context(webapp)
options = webapp.get_options()
context.update({
'python_version': webapp.type_instance.get_python_version(),
'python_version_number': webapp.type_instance.get_python_version_number(),
'max_requests': settings.WEBAPPS_PYTHON_MAX_REQUESTS,
'workers': options.get('processes', settings.WEBAPPS_PYTHON_DEFAULT_MAX_WORKERS),
'timeout': options.get('timeout', settings.WEBAPPS_PYTHON_DEFAULT_TIMEOUT),
})
self.update_uwsgi_context(webapp, context)
replace(context, "'", '"')
return context

View file

@ -19,7 +19,8 @@ from .types import AppType
class WebApp(models.Model): class WebApp(models.Model):
""" Represents a web application """ """ Represents a web application """
name = models.CharField(_("name"), max_length=128, validators=[validators.validate_name]) name = models.CharField(_("name"), max_length=128, validators=[validators.validate_name],
help_text=_("The app will be installed in %s") % settings.WEBAPPS_BASE_DIR)
type = models.CharField(_("type"), max_length=32, choices=AppType.get_choices()) type = models.CharField(_("type"), max_length=32, choices=AppType.get_choices())
account = models.ForeignKey('accounts.Account', verbose_name=_("Account"), account = models.ForeignKey('accounts.Account', verbose_name=_("Account"),
related_name='webapps') related_name='webapps')
@ -76,7 +77,7 @@ class WebApp(models.Model):
'home': self.get_user().get_home(), 'home': self.get_user().get_home(),
'app_name': self.name, 'app_name': self.name,
} }
path = settings.WEBAPPS_BASE_ROOT % context path = settings.WEBAPPS_BASE_DIR % context
public_root = self.options.filter(name='public-root').first() public_root = self.options.filter(name='public-root').first()
if public_root: if public_root:
path = os.path.join(path, public_root.value) path = os.path.join(path, public_root.value)

View file

@ -3,8 +3,8 @@ from django.conf import settings
from orchestra.settings import ORCHESTRA_BASE_DOMAIN from orchestra.settings import ORCHESTRA_BASE_DOMAIN
WEBAPPS_BASE_ROOT = getattr(settings, 'WEBAPPS_BASE_ROOT', WEBAPPS_BASE_DIR = getattr(settings, 'WEBAPPS_BASE_DIR',
'%(home)s/webapps/%(app_name)s/' '%(home)s/webapps/%(app_name)s'
) )
@ -13,13 +13,15 @@ WEBAPPS_FPM_LISTEN = getattr(settings, 'WEBAPPS_FPM_LISTEN',
'/opt/php/5.4/socks/%(user)s-%(app_name)s.sock' '/opt/php/5.4/socks/%(user)s-%(app_name)s.sock'
) )
WEBAPPS_FPM_DEFAULT_MAX_CHILDREN = getattr(settings, 'WEBAPPS_FPM_DEFAULT_MAX_CHILDREN', WEBAPPS_FPM_DEFAULT_MAX_CHILDREN = getattr(settings, 'WEBAPPS_FPM_DEFAULT_MAX_CHILDREN',
3 3
) )
WEBAPPS_PHPFPM_POOL_PATH = getattr(settings, 'WEBAPPS_PHPFPM_POOL_PATH', WEBAPPS_PHPFPM_POOL_PATH = getattr(settings, 'WEBAPPS_PHPFPM_POOL_PATH',
'/etc/php5/fpm/pool.d/%(user)s-%(app_name)s.conf') '/etc/php5/fpm/pool.d/%(user)s-%(app_name)s.conf'
)
WEBAPPS_FCGID_WRAPPER_PATH = getattr(settings, 'WEBAPPS_FCGID_WRAPPER_PATH', WEBAPPS_FCGID_WRAPPER_PATH = getattr(settings, 'WEBAPPS_FCGID_WRAPPER_PATH',
@ -59,6 +61,7 @@ WEBAPPS_TYPES = getattr(settings, 'WEBAPPS_TYPES', (
'orchestra.contrib.webapps.types.misc.WebalizerApp', 'orchestra.contrib.webapps.types.misc.WebalizerApp',
'orchestra.contrib.webapps.types.misc.SymbolicLinkApp', 'orchestra.contrib.webapps.types.misc.SymbolicLinkApp',
'orchestra.contrib.webapps.types.wordpress.WordPressApp', 'orchestra.contrib.webapps.types.wordpress.WordPressApp',
'orchestra.contrib.webapps.types.python.PythonApp',
)) ))
@ -95,6 +98,36 @@ WEBAPPS_PHP_CGI_INI_SCAN_DIR = getattr(settings, 'WEBAPPS_PHP_CGI_INI_SCAN_DIR',
) )
WEBAPPS_PYTHON_VERSIONS = getattr(settings, 'WEBAPPS_PYTHON_VERSIONS', (
('3.4-uwsgi', 'Python 3.4 uWSGI'),
('2.7-uwsgi', 'Python 2.7 uWSGI'),
))
WEBAPPS_DEFAULT_PYTHON_VERSION = getattr(settings, 'WEBAPPS_DEFAULT_PYTHON_VERSION',
'3.4-uwsgi'
)
WEBAPPS_UWSGI_SOCKET = getattr(settings, 'WEBAPPS_UWSGI_SOCKET',
'/var/run/uwsgi/app/%(app_name)s/socket'
)
WEBAPPS_PYTHON_MAX_REQUESTS = getattr(settings, 'WEBAPPS_PYTHON_MAX_REQUESTS',
500
)
WEBAPPS_PYTHON_DEFAULT_MAX_WORKERS = getattr(settings, 'WEBAPPS_PYTHON_DEFAULT_MAX_WORKERS',
3
)
WEBAPPS_PYTHON_DEFAULT_TIMEOUT = getattr(settings, 'WEBAPPS_PYTHON_DEFAULT_TIMEOUT',
30
)
WEBAPPS_UNDER_CONSTRUCTION_PATH = getattr(settings, 'WEBAPPS_UNDER_CONSTRUCTION_PATH', WEBAPPS_UNDER_CONSTRUCTION_PATH = getattr(settings, 'WEBAPPS_UNDER_CONSTRUCTION_PATH',
# Server-side path where a under construction stock page is # Server-side path where a under construction stock page is

View file

@ -53,5 +53,3 @@ class SymbolicLinkApp(PHPApp):
serializer = SymbolicLinkSerializer serializer = SymbolicLinkSerializer
icon = 'orchestra/icons/apps/SymbolicLink.png' icon = 'orchestra/icons/apps/SymbolicLink.png'
change_readonly_fileds = ('path',) change_readonly_fileds = ('path',)

View file

@ -22,16 +22,16 @@ help_message = _("Version of PHP used to execute this webapp. <br>"
class PHPAppForm(PluginDataForm): class PHPAppForm(PluginDataForm):
php_version = forms.ChoiceField(label=_("PHP version"), php_version = forms.ChoiceField(label=_("PHP version"),
choices=settings.WEBAPPS_PHP_VERSIONS, choices=settings.WEBAPPS_PHP_VERSIONS,
initial=settings.WEBAPPS_DEFAULT_PHP_VERSION, initial=settings.WEBAPPS_DEFAULT_PHP_VERSION,
help_text=help_message) help_text=help_message)
class PHPAppSerializer(serializers.Serializer): class PHPAppSerializer(serializers.Serializer):
php_version = serializers.ChoiceField(label=_("PHP version"), php_version = serializers.ChoiceField(label=_("PHP version"),
choices=settings.WEBAPPS_PHP_VERSIONS, choices=settings.WEBAPPS_PHP_VERSIONS,
default=settings.WEBAPPS_DEFAULT_PHP_VERSION, default=settings.WEBAPPS_DEFAULT_PHP_VERSION,
help_text=help_message) help_text=help_message)
class PHPApp(AppType): class PHPApp(AppType):

View file

@ -0,0 +1,61 @@
import os
import re
from collections import OrderedDict
from django import forms
from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers
from orchestra.plugins.forms import PluginDataForm
from orchestra.utils.functional import cached
from .. import settings
from ..options import AppOption
from . import AppType
help_message = _("Version of Python used to execute this webapp. <br>"
"Changing the Python version may result in application malfunction, "
"make sure that everything continue to work as expected.")
class PythonAppForm(PluginDataForm):
python_version = forms.ChoiceField(label=_("Python version"),
choices=settings.WEBAPPS_PYTHON_VERSIONS,
initial=settings.WEBAPPS_DEFAULT_PYTHON_VERSION,
help_text=help_message)
class PythonAppSerializer(serializers.Serializer):
python_version = serializers.ChoiceField(label=_("Python version"),
choices=settings.WEBAPPS_PYTHON_VERSIONS,
default=settings.WEBAPPS_DEFAULT_PYTHON_VERSION,
help_text=help_message)
class PythonApp(AppType):
name = 'python'
verbose_name = "Python"
help_text = _("This creates a Python application under ~/webapps/&lt;app_name&gt;<br>")
form = PythonAppForm
serializer = PythonAppSerializer
option_groups = (AppOption.FILESYSTEM, AppOption.PROCESS)
icon = 'orchestra/icons/apps/Python.png'
def get_directive(self):
context = self.get_directive_context()
return ('uwsgi', settings.WEBAPPS_UWSGI_SOCKET % context)
def get_python_version(self):
default_version = self.DEFAULT_PYTHON_VERSION
return self.instance.data.get('python_version', default_version)
def get_python_version_number(self):
python_version = self.get_python_version()
number = re.findall(r'[0-9]+\.?[0-9]?', python_version)
if not number:
raise ValueError("No version number matches for '%s'" % python_version)
if len(number) > 1:
raise ValueError("Multiple version number matches for '%s'" % python_version)
return number[0]

View file

@ -7,7 +7,9 @@ class WordPressApp(CMSApp):
name = 'wordpress-php' name = 'wordpress-php'
verbose_name = "WordPress" verbose_name = "WordPress"
help_text = _( help_text = _(
"Visit http://&lt;domain.lan&gt;/wp-admin/install.php to finish the installation.<br>" "This installs the latest version of WordPress into the webapp directory.<br>"
"A database and database user will automatically be created for this webapp." "A database and database user will automatically be created for this webapp.<br>"
"This installer creates a user 'admin' with a randomly generated password.<br>"
"The password will be visible in the 'password' field after the installer has finished."
) )
icon = 'orchestra/icons/apps/WordPress.png' icon = 'orchestra/icons/apps/WordPress.png'

View file

@ -216,6 +216,15 @@ class Apache2Backend(ServiceController):
(context['location'], directives), (context['location'], directives),
] ]
def get_uwsgi_directives(self, context, socket):
# requires apache2 mod_proxy_uwsgi
context['socket'] = socket
directives = "ProxyPass / unix:%(socket)s|uwsgi://" % context
directives += self.get_location_filesystem_map(context)
return [
(context['location'], directives),
]
def get_ssl(self, directives): def get_ssl(self, directives):
cert = directives.get('ssl-cert') cert = directives.get('ssl-cert')
key = directives.get('ssl-key') key = directives.get('ssl-key')

View file

@ -13,12 +13,20 @@ class PluginDataForm(forms.ModelForm):
value = self.plugin.get_name() value = self.plugin.get_name()
display = '%s <a href=".">change</a>' % force_text(self.plugin.verbose_name) display = '%s <a href=".">change</a>' % force_text(self.plugin.verbose_name)
self.fields[self.plugin_field].widget = ReadOnlyWidget(value, display) self.fields[self.plugin_field].widget = ReadOnlyWidget(value, display)
self.fields[self.plugin_field].help_text = getattr(self.plugin, 'help_text', '') help_text = self.fields[self.plugin_field].help_text
self.fields[self.plugin_field].help_text = getattr(self.plugin, 'help_text', help_text)
if self.instance: if self.instance:
for field in self.declared_fields: for field in self.declared_fields:
initial = self.fields[field].initial initial = self.fields[field].initial
self.fields[field].initial = self.instance.data.get(field, initial) self.fields[field].initial = self.instance.data.get(field, initial)
if self.instance.pk: if self.instance.pk:
# Admin Readonly fields are not availeble in self.fields, so we use Meta
plugin = getattr(self.instance, '%s_class' % self.plugin_field)
plugin_help_text = getattr(plugin, 'help_text', '')
model_help_text = self.instance._meta.get_field_by_name(self.plugin_field)[0].help_text
self._meta.help_texts = {
self.plugin_field: plugin_help_text or model_help_text
}
for field in self.plugin.get_change_readonly_fileds(): for field in self.plugin.get_change_readonly_fileds():
value = getattr(self.instance, field, None) or self.instance.data[field] value = getattr(self.instance, field, None) or self.instance.data[field]
display = value display = value

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -1,630 +0,0 @@
<?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"
id="svg3201"
version="1.1"
inkscape:version="0.48.3.1 r9886"
width="48"
height="48"
sodipodi:docname="DokuWikiMu.svg"
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/apps/DokuWikiMu.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata3207">
<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:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3205">
<radialGradient
r="10.625"
fy="4.625"
fx="62.625"
cy="4.625"
cx="62.625"
gradientTransform="matrix(2.2657407,0,0,0.74122745,-117.89261,32.892968)"
gradientUnits="userSpaceOnUse"
id="radialGradient3610"
xlink:href="#linearGradient8838-7"
inkscape:collect="always" />
<linearGradient
id="linearGradient8838-7">
<stop
id="stop8840-0"
style="stop-color:black;stop-opacity:1"
offset="0" />
<stop
id="stop8842-7"
style="stop-color:black;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
r="10.625"
fy="4.625"
fx="62.625"
cy="4.625"
cx="62.625"
gradientTransform="matrix(2.2657407,0,0,0.74122745,-117.84341,35.950626)"
gradientUnits="userSpaceOnUse"
id="radialGradient3708"
xlink:href="#linearGradient8838-7"
inkscape:collect="always" />
<radialGradient
r="8.6813803"
fy="212.80016"
fx="224.41418"
cy="212.80016"
cx="224.41418"
gradientTransform="matrix(1,0,0,0.984179,0,3.366635)"
gradientUnits="userSpaceOnUse"
id="radialGradient2647"
xlink:href="#linearGradient2360"
inkscape:collect="always" />
<linearGradient
y2="189.01556"
x2="286.22665"
y1="189.01556"
x1="219.21262"
gradientUnits="userSpaceOnUse"
id="linearGradient2643"
xlink:href="#linearGradient2336"
inkscape:collect="always" />
<linearGradient
y2="192.73286"
x2="277.8761"
y1="192.73286"
x1="219.66267"
gradientUnits="userSpaceOnUse"
id="linearGradient2640"
xlink:href="#linearGradient2352"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="217.94008"
x2="255.68353"
y1="251.56442"
x1="275.71765"
id="linearGradient2630"
xlink:href="#linearGradient2624"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="213.12164"
x2="251.64362"
y1="234.52202"
x1="248.62152"
id="linearGradient2618"
xlink:href="#linearGradient2612"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="210.3558"
x2="206.06017"
y1="222.05145"
x1="202.41772"
id="linearGradient2606"
xlink:href="#linearGradient2600"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="307.52844"
x2="224.67441"
y1="241.52789"
x1="184.30582"
id="linearGradient2406"
xlink:href="#linearGradient2408"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="265.40363"
x2="244.79126"
y1="220.07191"
x1="213.96568"
id="linearGradient2395"
xlink:href="#linearGradient2389"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="172.32423"
x2="185.81258"
y1="262.28729"
x1="286.15598"
id="linearGradient2362"
xlink:href="#linearGradient2370"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="195.87151"
x2="136.14151"
y1="303.78967"
x1="140.15784"
id="linearGradient2354"
xlink:href="#linearGradient2348"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="289.50323"
x2="240.84924"
y1="184.99277"
x1="162.76369"
id="linearGradient2346"
xlink:href="#linearGradient2332"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="246.35907"
x2="201.40646"
y1="246.35907"
x1="184.07063"
id="linearGradient2325"
xlink:href="#linearGradient2360"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,1.631384,0,-173.4045)"
r="7.1440549"
fy="274.64203"
fx="257.41144"
cy="274.64203"
cx="257.41144"
id="radialGradient2317"
xlink:href="#linearGradient2360"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="258.91571"
x2="255.6561"
y1="258.91571"
x1="191.75092"
id="linearGradient2247"
xlink:href="#linearGradient2229"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="262.25757"
x2="263.67093"
y1="262.25757"
x1="192.03938"
id="linearGradient2227"
xlink:href="#linearGradient2249"
inkscape:collect="always" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.984179,0,3.366635)"
r="8.6813803"
fy="212.80016"
fx="224.41418"
cy="212.80016"
cx="224.41418"
id="radialGradient2366"
xlink:href="#linearGradient2360"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="192.73286"
x2="277.8761"
y1="192.73286"
x1="219.66267"
id="linearGradient2350"
xlink:href="#linearGradient2352"
inkscape:collect="always" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="189.01556"
x2="286.22665"
y1="189.01556"
x1="219.21262"
id="linearGradient2342"
xlink:href="#linearGradient2336"
inkscape:collect="always" />
<linearGradient
id="linearGradient2336">
<stop
id="stop2338"
offset="0"
style="stop-color:#8f2a15;stop-opacity:1;" />
<stop
id="stop2340"
offset="1"
style="stop-color:#c8381b;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2352">
<stop
style="stop-color:#ce411e;stop-opacity:1;"
offset="0"
id="stop2354" />
<stop
style="stop-color:#ecad8d;stop-opacity:1;"
offset="1"
id="stop2356" />
</linearGradient>
<linearGradient
id="linearGradient2360">
<stop
id="stop2362"
offset="0"
style="stop-color:#d69c00;stop-opacity:1;" />
<stop
id="stop2364"
offset="1"
style="stop-color:#ffe658;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2213">
<stop
id="stop2215"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop2217"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2229">
<stop
style="stop-color:#00b62b;stop-opacity:1;"
offset="0"
id="stop2231" />
<stop
style="stop-color:#a1d784;stop-opacity:1;"
offset="1"
id="stop2233" />
</linearGradient>
<linearGradient
id="linearGradient2249">
<stop
id="stop2251"
offset="0"
style="stop-color:#00a423;stop-opacity:1;" />
<stop
id="stop2253"
offset="1"
style="stop-color:#00b427;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2332">
<stop
id="stop2334"
offset="0"
style="stop-color:#ede1ae;stop-opacity:1;" />
<stop
id="stop2336"
offset="1"
style="stop-color:#fefdfa;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2348">
<stop
id="stop2350"
offset="0"
style="stop-color:#fbf6f0;stop-opacity:1;" />
<stop
id="stop2352"
offset="1"
style="stop-color:#e9dac7;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2364">
<stop
style="stop-color:#fbf6f0;stop-opacity:1;"
offset="0"
id="stop2366" />
<stop
style="stop-color:#e9dac7;stop-opacity:1;"
offset="1"
id="stop2368" />
</linearGradient>
<linearGradient
id="linearGradient2370">
<stop
id="stop2372"
offset="0"
style="stop-color:#fbfaf9;stop-opacity:1;" />
<stop
id="stop2374"
offset="1"
style="stop-color:#e9dac7;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient2389">
<stop
id="stop2391"
offset="0"
style="stop-color:#000000;stop-opacity:0.17346939;" />
<stop
id="stop2393"
offset="1"
style="stop-color:#c7cec2;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2408">
<stop
style="stop-color:#000000;stop-opacity:0.17346939;"
offset="0"
id="stop2410" />
<stop
style="stop-color:#c7cec2;stop-opacity:0;"
offset="1"
id="stop2412" />
</linearGradient>
<marker
style="overflow:visible"
id="Arrow2Lstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow2Lstart">
<path
inkscape:connector-curvature="0"
transform="matrix(1.1,0,0,1.1,-5.5,0)"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
id="path2571" />
</marker>
<marker
style="overflow:visible"
id="TriangleOutL"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="TriangleOutL">
<path
inkscape:connector-curvature="0"
transform="scale(0.8,0.8)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
id="path2488" />
</marker>
<linearGradient
id="linearGradient2600">
<stop
id="stop2602"
offset="0"
style="stop-color:#e32525;stop-opacity:0.81632656;" />
<stop
id="stop2604"
offset="1"
style="stop-color:#e32525;stop-opacity:0.5714286;" />
</linearGradient>
<linearGradient
id="linearGradient2612">
<stop
id="stop2614"
offset="0"
style="stop-color:#25901b;stop-opacity:0.83673471;" />
<stop
id="stop2616"
offset="1"
style="stop-color:#25901b;stop-opacity:0.37755102;" />
</linearGradient>
<linearGradient
id="linearGradient2624">
<stop
id="stop2626"
offset="0"
style="stop-color:#3a9030;stop-opacity:0.83673471;" />
<stop
id="stop2628"
offset="1"
style="stop-color:#3d9c32;stop-opacity:0.79591835;" />
</linearGradient>
<inkscape:perspective
id="perspective100"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<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="1024"
id="namedview3203"
showgrid="false"
inkscape:zoom="7.7918606"
inkscape:cx="10.453259"
inkscape:cy="21.076505"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg3201" />
<path
inkscape:connector-curvature="0"
d="m 48.122094,39.37881 c 0,4.34954 -10.77808,7.87555 -24.0735,7.87555 -13.29542,0 -24.07349952,-3.52601 -24.07349952,-7.87555 0,-4.34955 10.77807952,-7.87556 24.07349952,-7.87556 13.29542,0 24.0735,3.52601 24.0735,7.87556 l 0,0 z"
id="path8836-9"
style="opacity:0.3;fill:url(#radialGradient3708);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible" />
<rect
style="fill:#eeeeec;stroke:#eeeeec"
id="rect3747"
width="31.308554"
height="23.776344"
x="8.3035679"
y="14.241219"
ry="11.888172" />
<path
style="fill:#6184a3;fill-opacity:1"
d="M 10.280293,40.441739 C 7.2051807,40.132054 4.8722076,39.068741 2.8990174,37.077537 -0.40380286,33.744562 -1.1067297,27.727678 1.1759893,23.645792 2.1196585,21.958353 3.8188126,20.299386 5.4807087,19.442893 l 0.7741857,-0.398997 0.011288,-1.226069 c 0.030962,-3.362392 1.3554573,-7.041803 3.9025052,-9.4279835 3.920374,-3.6727721 9.689551,-4.5169172 14.625477,-2.139999 2.531395,1.2190062 4.768749,3.4149696 5.824881,5.7171185 0.134346,0.29285 0.276817,0.532455 0.316601,0.532455 0.0398,0 0.324958,-0.170005 0.633723,-0.377784 2.080065,-1.399785 5.000273,-1.351753 7.212027,0.118622 2.543639,1.691007 3.424188,5.866753 1.989066,8.518585 -0.156214,0.28865 -0.263577,0.537672 -0.238588,0.553375 0.02499,0.0157 0.483839,0.173171 1.019662,0.349919 2.556281,0.843228 4.816568,3.003772 5.753516,5.499618 0.314345,0.837357 0.611974,2.379683 0.611974,3.171291 0,0.28762 -0.07623,1.867577 -0.169403,2.401863 -0.631568,3.621676 -3.342607,6.461999 -7.126882,7.466739 l -0.926404,0.245964 -14.513874,0.01651 c -7.982628,0.0092 -14.687708,-7.4e-4 -14.900171,-0.02236 z M 31.462046,14.76551 c -20.974697,22.156329 -10.487349,11.078164 0,0 z"
id="path3726"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssscsssssssscsssssccscc" />
<g
transform="matrix(0.73043968,0,0,0.73043968,-109.25563,-166.72103)"
style="display:inline"
inkscape:label="paper"
id="layer3">
<g
transform="matrix(0.3463897,0,0,0.3463897,105.30454,185.54142)"
id="g1419">
<g
id="g2376">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="rect1422"
d="m 120.21543,196.43769 70.90655,-0.79226 -2.40261,109.05308 -71.71761,0.37344 3.21367,-108.63426 z"
style="fill:url(#linearGradient2354);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.7216621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
transform="matrix(0.989976,-0.141236,0.201069,0.979577,0,0)" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="rect1425"
d="m 179.20033,182.08731 79.84173,-19.51687 26.61391,101.72428 -82.50312,21.58684 -23.95252,-103.79425 z"
style="fill:url(#linearGradient2362);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="rect1419"
d="m 159.01353,181.74387 85.58587,0.53396 0,110.47429 -84.53387,-2.5127 -1.052,-108.49555 z"
style="fill:url(#linearGradient2346);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00418305px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
transform="matrix(0.995676,-0.09289891,0.08102261,0.996712,0,0)" />
</g>
<path
inkscape:connector-curvature="0"
transform="matrix(0.995433,-0.09546066,0.09546066,0.995433,0,0)"
style="font-size:12.0000124px;font-style:normal;font-weight:normal;line-height:125%;fill:#6184a3;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
d="m 167.55116,214.00773 0,-20.1846 5.34962,0 0,2.37403 -2.48145,0 0,15.43654 2.48145,0 0,2.37403 -5.34962,0 m 7.34767,0 0,-20.1846 5.34961,0 0,2.37403 -2.48144,0 0,15.43654 2.48144,0 0,2.37403 -5.34961,0 m 7.36915,-20.1846 5.81153,0 c 1.31054,2e-5 2.30956,0.10028 2.99707,0.30078 0.92382,0.27216 1.71516,0.75555 2.37403,1.4502 0.65884,0.69468 1.16014,1.54689 1.50391,2.55664 0.34373,1.00262 0.51561,2.24155 0.51562,3.71681 -10e-6,1.29623 -0.16115,2.41342 -0.4834,3.35156 -0.39389,1.14584 -0.95607,2.07325 -1.68652,2.78223 -0.55145,0.53711 -1.29624,0.95606 -2.23438,1.25684 -0.70183,0.222 -1.63999,0.33301 -2.81446,0.33301 l -5.9834,0 0,-15.74807 m 3.17969,2.66407 0,10.43067 2.37402,0 c 0.88802,1e-5 1.52897,-0.0501 1.92286,-0.15039 0.51561,-0.1289 0.94172,-0.34732 1.27832,-0.65527 0.34374,-0.30794 0.62304,-0.81282 0.83789,-1.51465 0.21483,-0.70898 0.32226,-1.6722 0.32227,-2.88965 -1e-5,-1.21744 -0.10744,-2.15201 -0.32227,-2.80372 -0.21485,-0.65168 -0.51563,-1.16014 -0.90234,-1.52539 -0.38673,-0.36522 -0.87729,-0.61229 -1.47168,-0.74121 -0.44402,-0.10025 -1.31414,-0.15038 -2.61036,-0.15039 l -1.42871,0 m 14.96388,13.084 -3.75977,-15.74807 3.25489,0 2.37403,10.8174 2.87891,-10.8174 3.78125,0 2.76074,11.00002 2.417,-11.00002 3.20118,0 -3.82423,15.74807 -3.37305,0 -3.13672,-11.77345 -3.12598,11.77345 -3.44825,0 m 22.76272,-15.74807 0,20.1846 -5.34961,0 0,-2.37403 2.48145,0 0,-15.45803 -2.48145,0 0,-2.35254 5.34961,0 m 7.34767,0 0,20.1846 -5.34962,0 0,-2.37403 2.48145,0 0,-15.45803 -2.48145,0 0,-2.35254 5.34962,0"
id="text2382" />
<g
style="display:inline"
id="g2632">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csssssccccccssssscc"
id="path2414"
d="m 174.75585,201.60224 c -6.04576,2.46667 -10.16789,4.4194 -12.88454,6.35064 -2.71665,1.93124 -3.19257,4.60007 -3.24631,6.26587 -0.0269,0.8329 0.0809,1.77774 0.63189,2.44014 0.55103,0.6624 1.80769,1.87421 2.75794,2.38558 1.90049,1.02274 7.5417,2.42901 10.51899,3.07308 11.90917,2.57627 26.80568,1.68117 26.80568,1.68117 1.69307,1.2452 2.83283,2.82434 3.269,4.26902 4.5766,-1.88674 11.81084,-6.58439 13.15657,-8.57706 -5.45142,-4.19955 -10.79692,-6.33346 -16.51317,-8.30847 -1.59867,-0.71918 -2.87956,-1.22649 -0.71773,2.55635 0.98506,2.47275 0.85786,5.05143 0.57176,7.41825 0,0 -16.52749,0.40678 -28.23838,-2.1266 -2.92772,-0.63334 -5.46627,-0.95523 -7.21875,-1.89832 -0.87624,-0.47154 -1.48296,-0.8208 -1.91578,-1.3411 -0.43282,-0.5203 -0.2196,-1.29055 -0.20128,-1.85858 0.0366,-1.13607 0.25336,-1.67063 2.86177,-3.52492 2.60841,-1.85429 5.65407,-3.36195 11.65936,-5.81211 -0.0877,-1.29125 -0.29025,-2.5059 -1.29702,-2.99294 z"
style="fill:url(#linearGradient2606);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker-end:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccsssscccccssssc"
id="path2608"
d="m 269.62539,220.7482 c -1.43576,-0.13963 -2.58044,0.30288 -2.56084,1.50218 0.94391,0.85652 1.34942,2.43518 1.48562,3.14008 0.1362,0.7049 0.0359,1.21914 -0.48562,1.89004 -1.043,1.3418 -3.12498,1.56875 -6.5006,2.72063 -6.75124,2.30377 -16.89306,2.52561 -27.90689,3.84639 -22.02767,2.64157 -39.03164,3.76107 -39.03164,3.76107 1.98346,-4.64758 6.32828,-4.41197 6.34903,-8.20969 0.27376,-0.89755 -3.14597,-1.31638 -5.09943,-0.10731 -4.26694,3.70137 -7.59152,6.75353 -10.69418,10.51311 l 1.88795,3.08438 c 0,0 26.13006,-2.88973 48.19776,-5.5361 11.03385,-1.32318 20.95601,-1.99856 27.80968,-4.33728 3.42683,-1.16936 5.95975,-1.49022 7.6409,-3.51958 0.63172,-0.76256 1.35238,-3.04699 1.06804,-4.73369 -0.21951,-1.30213 -1.14979,-3.09774 -2.15978,-4.01423 z"
style="fill:url(#linearGradient2618);fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="csscccccsscc"
id="path2620"
d="m 254.36185,220.33948 c -6.84997,3.24198 -7.15311,8.60912 -5.95953,12.79884 1.19358,4.18972 5.26293,8.75677 9.32121,12.40608 8.11656,7.29861 12.06046,9.33163 12.06046,9.33163 -3.71515,-0.10342 -7.89887,-1.41174 -8.13315,0.49304 -0.9483,2.97582 11.49137,3.47486 17.43787,2.70205 -1.39456,-7.57836 -3.79323,-13.21546 -7.73151,-14.90312 -1.68464,-0.14804 0.31242,4.72441 0.76985,9.39604 0,0 -3.62454,-1.73122 -11.60519,-8.90762 -3.99032,-3.5882 -7.37386,-7.3421 -8.47319,-11.20099 -1.09933,-3.85889 0.0776,-6.1205 4.95082,-9.53176 0.92816,-0.99528 -1.28985,-2.45913 -2.63764,-2.58419 z"
style="fill:url(#linearGradient2630);fill-opacity:1;fill-rule:evenodd;stroke:none" />
</g>
<path
inkscape:connector-curvature="0"
style="fill:url(#linearGradient2395);fill-opacity:1;stroke:none;display:inline"
d="m 213.96569,234.57806 2.18756,-14.42897 15.21982,6.08793 21.49387,29.94828 -20.40591,9.21832 -18.49534,-30.82556 z"
id="rect2386"
sodipodi:nodetypes="cccccc" />
<g
style="display:inline"
id="g2649">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path1443"
d="m 232.55816,219.5295 -15.92827,0.32199 3.08809,-15.15716 12.84018,14.83517 z"
style="fill:url(#radialGradient2647);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="path1452"
d="m 221.60041,219.29315 -4.41205,0.0782 0.85429,-3.98263 3.55776,3.90445 z"
style="fill:#812310;fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc"
id="rect1437"
d="m 269.44172,159.27421 0.098,8.91471 8.0581,8.72344 7.75906,0.7992 -52.80669,41.84092 -6.66532,-3.30696 -5.08243,-5.618 -1.08987,-5.91194 49.72911,-45.44137 z"
style="fill:url(#linearGradient2643);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="rect1446"
d="m 268.94766,168.32844 8.3426,8.82719 -51.1007,38.68262 -4.9197,-5.4436 47.6778,-42.06621 z"
style="fill:url(#linearGradient2640);fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path1440"
d="m 285.33776,177.73216 -8.16219,-0.86619 -7.7518,-8.67862 0.0132,-9.14293 8.36213,0.75209 7.18862,9.57682 0.35007,8.35883 z"
style="fill:#ffe965;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;display:inline" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="path1449"
d="m 280.72049,168.46367 0.1644,4.05654 -3.81335,-0.71676 -2.87504,-3.18901 -0.28089,-3.53393 3.85447,-0.16637 2.95041,3.54953 z"
style="fill:#cb391c;fill-opacity:1;fill-rule:evenodd;stroke:none" />
</g>
<g
style="display:inline"
id="g2657">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
id="rect2397"
d="m 183.88617,256.82796 0.99991,-16.30721 17.2878,8.44012 26.05488,38.00946 -29.28095,-1.13363 -15.06164,-29.00874 z"
style="fill:url(#linearGradient2406);fill-opacity:1;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="rect2207"
d="m 200.90647,238.44836 -8.04601,15.77386 -7.05577,-13.57337 15.10178,-2.20049 z"
style="fill:url(#linearGradient2325);fill-opacity:1;stroke:#000000;stroke-linejoin:round;stroke-opacity:1;display:inline" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc"
id="rect1328"
d="m 201.05389,238.55401 62.11704,24.91912 -7.88689,3.21429 -4.35152,9.30976 1.1716,9.96396 -59.31453,-31.72759 -0.49402,-7.36382 3.09592,-5.82826 5.6624,-2.48746 z"
style="fill:url(#linearGradient2227);fill-opacity:1;stroke:#000000;stroke-linejoin:round;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="rect2204"
d="m 255.27801,266.53504 7.9241,-3.04772 0.85337,10.24037 -3.9011,8.28983 -8.04601,3.77919 -1.341,-9.63083 4.51064,-9.63084 z"
style="fill:url(#radialGradient2317);fill-opacity:1;stroke:#000000;stroke-linejoin:round;stroke-opacity:1;display:inline" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc"
id="rect2210"
d="m 195.7549,241.421 59.13059,24.7962 -4.5917,9.76614 -57.48995,-29.00967 2.95106,-5.55267 z"
style="fill:url(#linearGradient2247);fill-opacity:1;stroke:none;display:inline" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
id="rect2308"
d="m 255.02263,275.21029 2.08411,-4.1069 2.96459,-1.06995 0.69433,3.37197 -1.76759,3.85723 -3.15516,1.38315 -0.82028,-3.4355 z"
style="fill:#00b527;fill-opacity:1;stroke:none" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
id="rect2327"
d="m 186.56849,241.00362 3.54963,-0.47312 -2.02297,3.53926 -1.52666,-3.06614 z"
style="fill:#258209;fill-opacity:1;stroke:none;display:inline" />
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -1,160 +0,0 @@
<?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"
id="svg3201"
version="1.1"
inkscape:version="0.48.3.1 r9886"
width="48"
height="48"
sodipodi:docname="DrupalMu.svg"
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/apps/DrupalMu.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata3207">
<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:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3205">
<radialGradient
r="10.625"
fy="4.625"
fx="62.625"
cy="4.625"
cx="62.625"
gradientTransform="matrix(2.2657407,0,0,0.74122745,-117.89261,32.892968)"
gradientUnits="userSpaceOnUse"
id="radialGradient3610"
xlink:href="#linearGradient8838-7"
inkscape:collect="always" />
<linearGradient
id="linearGradient8838-7">
<stop
id="stop8840-0"
style="stop-color:black;stop-opacity:1"
offset="0" />
<stop
id="stop8842-7"
style="stop-color:black;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
r="10.625"
fy="4.625"
fx="62.625"
cy="4.625"
cx="62.625"
gradientTransform="matrix(2.2657407,0,0,0.74122745,-117.84341,35.950626)"
gradientUnits="userSpaceOnUse"
id="radialGradient3708"
xlink:href="#linearGradient8838-7"
inkscape:collect="always" />
</defs>
<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="1024"
id="namedview3203"
showgrid="false"
inkscape:zoom="3.8959303"
inkscape:cx="0.68424809"
inkscape:cy="43.440013"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg3201" />
<path
inkscape:connector-curvature="0"
d="m 48.122094,39.37881 c 0,4.34954 -10.77808,7.87555 -24.0735,7.87555 -13.29542,0 -24.07349952,-3.52601 -24.07349952,-7.87555 0,-4.34955 10.77807952,-7.87556 24.07349952,-7.87556 13.29542,0 24.0735,3.52601 24.0735,7.87556 l 0,0 z"
id="path8836-9"
style="opacity:0.3;fill:url(#radialGradient3708);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible" />
<rect
style="fill:#eeeeec;stroke:#eeeeec"
id="rect3747"
width="31.308554"
height="23.776344"
x="8.3035679"
y="14.241219"
ry="11.888172" />
<path
style="fill:#93c5e4;fill-opacity:1"
d="M 10.280293,40.441737 C 7.2051807,40.132052 4.8722076,39.06874 2.8990174,37.077535 -0.40380281,33.74456 -1.1067297,27.727676 1.1759893,23.645787 2.1196585,21.958348 3.8188126,20.299384 5.4807087,19.442889 l 0.7741857,-0.398994 0.011289,-1.226072 C 6.2971444,14.455434 7.6216401,10.77602 10.168688,8.3898403 14.089062,4.7170682 19.858239,3.8729229 24.794165,6.249841 c 2.531395,1.2190065 4.768749,3.4149697 5.824881,5.717118 0.134346,0.292851 0.276817,0.532457 0.316601,0.532457 0.0398,0 0.324958,-0.170005 0.633723,-0.377787 2.080065,-1.399783 5.000273,-1.351751 7.212027,0.118622 2.543639,1.69101 3.424188,5.866753 1.989066,8.518588 -0.156214,0.28865 -0.263577,0.53767 -0.238588,0.553375 0.02499,0.0157 0.483839,0.17317 1.019662,0.349919 2.556281,0.843227 4.816568,3.00377 5.753516,5.499616 0.314345,0.837359 0.611974,2.379682 0.611974,3.17129 0,0.28762 -0.07623,1.86758 -0.169403,2.401864 -0.631568,3.621676 -3.342607,6.462001 -7.126882,7.466741 l -0.926404,0.245964 -14.513874,0.01651 c -7.982628,0.0092 -14.687708,-9.84e-4 -14.900171,-0.02238 z"
id="path3726"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssscsssssssscsssssccs" />
<g
id="g3003"
transform="matrix(0.64828664,0,0,0.64828664,7.5527918,8.5331199)"
inkscape:transform-center-x="-1.0664281"
inkscape:transform-center-y="-3.7324978">
<path
inkscape:connector-curvature="0"
id="path6"
d="M 34.090098,9.1797034 C 31.767567,7.7335672 29.576496,7.1638982 27.385409,5.7178032 26.026937,4.7975404 24.142593,2.6064525 22.565038,0.72214222 22.25828,3.7458125 21.33801,4.9728263 20.286308,5.8492663 18.05144,7.6020962 16.649147,8.1279792 14.721005,9.1797034 13.099587,10.012281 4.2914557,15.27086 4.2914557,26.576856 c 0,11.305933 9.5092553,19.632018 20.0702633,19.632018 10.560964,0 19.719685,-7.668772 19.719685,-19.281495 0,-11.612658 -8.589013,-16.871239 -9.991306,-17.7476756 z"
style="fill:#00598e" />
<path
inkscape:connector-curvature="0"
id="path8"
d="m 30.530787,36.388028 c 0.701163,0 1.44609,0.0438 1.97197,0.394389 0.525883,0.350543 0.832613,1.139364 1.007874,1.577551 0.175326,0.438212 0,0.701153 -0.350524,0.87644 -0.306789,0.175265 -0.35059,0.08764 -0.65735,-0.482051 -0.306753,-0.569651 -0.569681,-1.139366 -2.103434,-1.139366 -1.533754,0 -2.015805,0.525853 -2.760753,1.139366 -0.744944,0.613515 -1.007869,0.832642 -1.270808,0.482051 -0.262941,-0.350587 -0.175315,-0.701169 0.306737,-1.139365 0.482055,-0.4382 1.270828,-1.139365 2.015808,-1.44609 0.744953,-0.306791 1.139366,-0.262925 1.84048,-0.262925 l 0,0 z"
style="fill:#ffffff" />
<path
inkscape:connector-curvature="0"
id="path10"
d="m 23.256403,41.383671 c 0.876441,0.701124 2.191068,1.270827 4.995651,1.270827 2.804586,0 4.776586,-0.78882 5.652982,-1.446142 0.394412,-0.306731 0.569698,-0.04382 0.613499,0.131465 0.04386,0.175314 0.131464,0.43824 -0.175262,0.744974 -0.219127,0.21912 -2.234927,1.62141 -4.601264,1.840515 -2.366381,0.219093 -5.565349,0.350557 -7.493509,-1.402279 -0.306727,-0.306772 -0.219064,-0.74497 0,-0.920281 0.219126,-0.175272 0.394411,-0.306735 0.657352,-0.306735 0.262941,0 0.219087,0 0.350551,0.08764 l 0,0 z"
style="fill:#ffffff" />
<path
inkscape:connector-curvature="0"
id="path12"
d="m 12.520122,38.053242 c 3.33044,-0.04387 3.943947,-0.613513 6.879994,-1.928148 15.863396,-7.099116 18.799442,-13.584698 19.369108,-15.074612 0.569699,-1.489957 1.402279,-3.900151 0.525882,-6.573243 -0.169228,-0.516053 -0.29251,-0.930415 -0.381545,-1.263793 C 36.805518,10.856247 34.712656,9.5700024 34.080346,9.1748343 31.801615,7.728743 29.566731,7.159029 27.375628,5.7129375 26.017185,4.8365024 24.132844,2.6016154 22.555289,0.71728498 22.2485,3.7409777 21.372104,5.0118054 20.276556,5.8444006 18.041664,7.5972796 16.639386,8.1231321 14.711225,9.1748343 13.089836,10.051274 4.2816978,15.266054 4.2816978,26.571983 c 0,3.609719 0.9695098,6.915694 2.6329705,9.743944 l 0.4345376,-0.01556 c 0.920247,0.832595 2.3663601,1.796678 5.1709161,1.752879 z"
style="fill:#0073ba" />
<path
inkscape:connector-curvature="0"
id="path14"
d="M 34.080346,9.1748343 C 31.801615,7.728743 29.566731,7.159029 27.375628,5.7129375 26.017185,4.8365024 24.132844,2.6016154 22.555289,0.71728498 22.2485,3.7409777 21.372104,5.0118054 20.276556,5.8444006 18.041664,7.5972796 16.639386,8.1231321 14.711225,9.1748343 13.089836,10.051274 4.2816978,15.266054 4.2816978,26.571983 c 0,3.609719 0.9695098,6.915694 2.6329705,9.743944 3.5466277,6.029889 10.2482267,9.888084 17.4372997,9.888084 10.560956,0 19.719684,-7.668772 19.719684,-19.281437 0,-6.377263 -2.590255,-10.837861 -5.158091,-13.709128 -2.108043,-2.357199 -4.201049,-3.6434436 -4.833215,-4.0386117 z m 5.326588,5.1298647 c 2.877156,3.597128 4.336061,7.842377 4.336061,12.617875 0,2.771148 -0.527811,5.388863 -1.568747,7.780659 -0.987459,2.26883 -2.4094,4.278898 -4.226366,5.974547 -3.591569,3.351706 -8.41997,5.197573 -13.595914,5.197573 -2.560687,0 -5.073487,-0.489081 -7.468591,-1.453807 -2.352527,-0.94753 -4.472551,-2.3043 -6.30115,-4.032752 -3.8510202,-3.639797 -5.9718669,-8.546757 -5.9718669,-13.816811 0,-4.693944 1.5235887,-8.864822 4.5283833,-12.396626 2.2956266,-2.698273 4.7710076,-4.1936671 5.7287516,-4.7113412 0.46499,-0.2536462 0.901182,-0.4774924 1.323031,-0.6939519 1.32225,-0.678689 2.571148,-1.3196827 4.288889,-2.6669881 0.915988,-0.6961406 1.891737,-1.7987311 2.307277,-4.5984547 1.447515,1.7216416 3.127255,3.6563963 4.410821,4.484523 1.139353,0.7519791 2.307987,1.2788589 3.438159,1.7885041 1.069149,0.482029 2.174638,0.9804706 3.268631,1.674732 0.0018,0.00136 0.04099,0.025553 0.04099,0.025553 3.197924,1.9966268 4.901719,4.1267468 5.461639,4.8267578 z"
style="fill:#004975" />
<path
inkscape:connector-curvature="0"
id="path16"
d="m 22.774381,1.5937182 c 0.613483,1.7966831 0.525884,2.7169311 0.525884,3.1113198 0,0.394389 -0.219126,1.4461034 -0.920295,1.9719862 -0.306733,0.2190788 -0.394395,0.3944051 -0.394395,0.4382036 0,0.1752646 0.394395,0.3067268 0.394395,0.7011334 0,0.4820332 -0.21907,1.4461351 -2.541615,3.7686668 -2.322573,2.322534 -5.653013,4.382137 -8.238475,5.652966 C 9.0144231,18.508823 7.7874103,18.421161 7.4368549,17.807679 7.0862773,17.194197 7.5683179,15.835704 9.1896923,14.039023 10.811103,12.242345 15.93822,9.6568851 15.93822,9.6568851 L 22.336162,5.1870844 22.68675,3.4780508"
style="fill:#93c5e4" />
<path
inkscape:connector-curvature="0"
id="path18"
d="m 22.774381,1.5498967 c -0.394411,2.8922154 -1.270807,3.7686495 -2.454025,4.6888929 -1.971942,1.4899534 -3.900084,2.4101952 -4.338323,2.6293198 -1.139337,0.56965 -5.258593,2.8483826 -7.4058104,6.1350136 -0.6573465,1.007866 0,1.402277 0.1314641,1.489895 0.131463,0.08765 1.6213643,0.262925 4.8203393,-1.665218 3.198971,-1.928143 4.601261,-3.067507 6.397943,-4.951807 0.964103,-1.0078836 1.095567,-1.5775986 1.095567,-1.8405239 0,-0.3067261 -0.219128,-0.4381895 -0.569719,-0.5258525 -0.175261,-0.043802 -0.219059,-0.1314622 0,-0.2629256 0.219128,-0.1314632 1.139369,-0.5696668 1.358493,-0.744977 0.219126,-0.1752639 1.270829,-0.8764349 1.314629,-2.0157916 0.04386,-1.1393393 -0.04381,-1.9281403 -0.350558,-2.9360257 l 0,0 z"
style="fill:#ffffff" />
<path
inkscape:connector-curvature="0"
id="path20"
d="m 12.914535,33.408116 c 0.04385,-3.418034 3.242809,-6.617006 7.274359,-6.660868 5.127116,-0.04381 8.676675,5.083317 11.26213,5.039515 2.191071,-0.04387 6.397946,-4.338339 8.457552,-4.338339 2.191088,0 2.804583,2.278733 2.804583,3.637161 0,1.358492 -0.438189,3.812486 -1.489891,5.346241 -1.051765,1.533753 -1.709079,2.103413 -2.936046,2.015805 -1.577616,-0.131461 -4.732726,-5.039515 -6.748531,-5.127114 -2.541658,-0.08765 -8.063164,5.302379 -12.4015,5.302379 -2.629275,0 -3.418098,-0.394389 -4.294495,-0.964053 -1.31467,-0.920292 -1.971987,-2.322573 -1.928161,-4.250727 l 0,0 z"
style="fill:#ffffff" />
<path
inkscape:connector-curvature="0"
id="path22"
d="m 39.295106,14.477239 c 0.876397,2.673092 0.04383,5.083286 -0.525882,6.573243 -0.569666,1.489914 -3.505712,7.975496 -19.369108,15.074612 -2.936047,1.314635 -3.549554,1.884286 -6.879994,1.928148 -2.804556,0.04381 -4.2506691,-0.920282 -5.1709161,-1.752877 l -0.4345376,0.01555 C 10.461296,42.345805 17.162895,46.204 24.351968,46.204 c 10.560956,0 19.719684,-7.668772 19.719684,-19.281438 0,-6.377263 -2.590255,-10.83786 -5.158091,-13.709127 0.08902,0.333378 0.212317,0.74774 0.381545,1.263793 z"
style="fill:none" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -1,182 +0,0 @@
<?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: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"
version="1.1"
width="48"
height="48"
viewBox="0 0 48 48.301887"
id="svg2943"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="PHPFCGI.svg"
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/apps/PHPFCGI.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata15">
<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:title>
</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="1024"
id="namedview13"
showgrid="false"
inkscape:zoom="23.834212"
inkscape:cx="29.136432"
inkscape:cy="25.452333"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2943" />
<defs
id="defs2945">
<linearGradient
x1="150"
y1="84"
x2="299"
y2="84"
id="linearGradient3798"
gradientUnits="userSpaceOnUse">
<stop
id="stop3800"
style="stop-color:#dddce9;stop-opacity:1"
offset="0" />
<stop
id="stop3802"
style="stop-color:#5664a3;stop-opacity:1"
offset="0.37" />
<stop
id="stop3804"
style="stop-color:#000000;stop-opacity:1"
offset="1" />
</linearGradient>
<radialGradient
cx="77.914261"
cy="-48.544521"
r="146"
fx="77.914261"
fy="-48.544521"
id="radialGradient3870"
xlink:href="#linearGradient3798"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5089497,0,0,1.3582164,-39.028917,76.957747)" />
<radialGradient
cx="77.914261"
cy="-48.544521"
r="146"
fx="77.914261"
fy="-48.544521"
id="radialGradient3870-6"
xlink:href="#linearGradient3798-8"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5089497,0,0,1.3582164,-39.028917,76.957747)" />
<linearGradient
x1="150"
y1="84"
x2="299"
y2="84"
id="linearGradient3798-8"
gradientUnits="userSpaceOnUse">
<stop
id="stop3800-0"
style="stop-color:#dddce9;stop-opacity:1"
offset="0" />
<stop
id="stop3802-9"
style="stop-color:#5664a3;stop-opacity:1"
offset="0.37" />
<stop
id="stop3804-4"
style="stop-color:#000000;stop-opacity:1"
offset="1" />
</linearGradient>
<filter
inkscape:collect="always"
id="filter3797"
x="-0.13393395"
width="1.2678679"
y="-0.25729417"
height="1.5145883">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="16.295298"
id="feGaussianBlur3799" />
</filter>
</defs>
<ellipse
cx="150"
cy="80"
rx="146"
ry="76"
id="ellipse3860-0"
style="fill:#555753;fill-opacity:1;stroke:#555753;stroke-width:5.5;filter:url(#filter3797)"
sodipodi:cx="150"
sodipodi:cy="80"
sodipodi:rx="146"
sodipodi:ry="76"
transform="matrix(0.13546531,0,0,0.05031395,5.6817942,36.572954)" />
<ellipse
cx="150"
cy="80"
rx="146"
ry="76"
id="ellipse3860"
style="fill:#6c7eb7;stroke:url(#radialGradient3870);stroke-width:5.5"
sodipodi:cx="150"
sodipodi:cy="80"
sodipodi:rx="146"
sodipodi:ry="76"
transform="matrix(0.1620589,0,0,0.25666252,-0.33382188,2.2009827)" />
<path
d="m 5.4618682,23.497045 2.59294,-13.126772 5.9961898,0 c 2.59294,0.162059 3.889411,1.458533 3.889411,3.727358 0,3.889414 -3.07915,6.158237 -5.834128,5.996179 l -2.9170559,0 -0.6482379,3.403235 -3.079119,0 z m 4.3755911,-5.834117 0.8102927,-4.861768 2.106768,0 c 1.13439,0 1.944715,0.486177 1.944715,1.45853 -0.162094,2.755001 -1.458553,3.241178 -2.917071,3.403238 l -1.9447047,0 z"
id="p"
style="fill-rule:evenodd;stroke:#ffffff;stroke-width:0.32411811;stroke-linejoin:round"
inkscape:connector-curvature="0" />
<path
d="m 18.305109,20.09381 2.592939,-13.1267725 3.079118,0 -0.648239,3.4032355 2.917073,0 c 2.592954,0.162059 3.56531,1.458533 3.241193,3.079124 l -1.134446,6.644413 -3.241174,0 1.134427,-5.996179 c 0.162043,-0.810294 0.162043,-1.296471 -0.972356,-1.296471 l -2.430892,0 -1.45854,7.29265 -3.079103,0 z"
id="h"
style="stroke:#ffffff;stroke-width:0.32411811;stroke-linejoin:round"
inkscape:connector-curvature="0" />
<use
transform="translate(23.728448,-1.7015835e-7)"
id="p2"
xlink:href="#p"
x="0"
y="0"
width="300"
height="160" />
<text
xml:space="preserve"
style="font-size:14.08805083999999930px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:128.99999619000001871%;letter-spacing:-0.96603775000000003px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans Mono;-inkscape-font-specification:Droid Sans Mono Bold Italic;stroke-width:0.30188679;stroke-miterlimit:4;stroke-dasharray:none"
x="7.2367697"
y="35.194664"
id="text2992"
sodipodi:linespacing="129%"><tspan
sodipodi:role="line"
id="tspan2994"
x="7.2367697"
y="35.194664"
style="font-size:14.08805083999999930px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;letter-spacing:-0.96603775000000003px;stroke:#ffffff;stroke-width:0.30188679;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol Bold Italic">FCGI</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

View file

@ -1,182 +0,0 @@
<?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: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"
version="1.1"
width="48"
height="48"
viewBox="0 0 48 48.301887"
id="svg2943"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="PHPFPM.svg"
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/apps/PHPFPM.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata15">
<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:title>
</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="1024"
id="namedview13"
showgrid="false"
inkscape:zoom="8.4266665"
inkscape:cx="-4.8021953"
inkscape:cy="14.32354"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2943" />
<defs
id="defs2945">
<linearGradient
x1="150"
y1="84"
x2="299"
y2="84"
id="linearGradient3798"
gradientUnits="userSpaceOnUse">
<stop
id="stop3800"
style="stop-color:#dddce9;stop-opacity:1"
offset="0" />
<stop
id="stop3802"
style="stop-color:#5664a3;stop-opacity:1"
offset="0.37" />
<stop
id="stop3804"
style="stop-color:#000000;stop-opacity:1"
offset="1" />
</linearGradient>
<radialGradient
cx="77.914261"
cy="-48.544521"
r="146"
fx="77.914261"
fy="-48.544521"
id="radialGradient3870"
xlink:href="#linearGradient3798"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5089497,0,0,1.3582164,-39.028917,76.957747)" />
<radialGradient
cx="77.914261"
cy="-48.544521"
r="146"
fx="77.914261"
fy="-48.544521"
id="radialGradient3870-6"
xlink:href="#linearGradient3798-8"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5089497,0,0,1.3582164,-39.028917,76.957747)" />
<linearGradient
x1="150"
y1="84"
x2="299"
y2="84"
id="linearGradient3798-8"
gradientUnits="userSpaceOnUse">
<stop
id="stop3800-0"
style="stop-color:#dddce9;stop-opacity:1"
offset="0" />
<stop
id="stop3802-9"
style="stop-color:#5664a3;stop-opacity:1"
offset="0.37" />
<stop
id="stop3804-4"
style="stop-color:#000000;stop-opacity:1"
offset="1" />
</linearGradient>
<filter
inkscape:collect="always"
id="filter3797"
x="-0.13393395"
width="1.2678679"
y="-0.25729417"
height="1.5145883">
<feGaussianBlur
inkscape:collect="always"
stdDeviation="16.295298"
id="feGaussianBlur3799" />
</filter>
</defs>
<ellipse
cx="150"
cy="80"
rx="146"
ry="76"
id="ellipse3860-0"
style="fill:#555753;fill-opacity:1;stroke:#555753;stroke-width:5.5;filter:url(#filter3797)"
sodipodi:cx="150"
sodipodi:cy="80"
sodipodi:rx="146"
sodipodi:ry="76"
transform="matrix(0.13546531,0,0,0.05031395,5.6817942,36.572954)" />
<ellipse
cx="150"
cy="80"
rx="146"
ry="76"
id="ellipse3860"
style="fill:#6c7eb7;stroke:url(#radialGradient3870);stroke-width:5.5"
sodipodi:cx="150"
sodipodi:cy="80"
sodipodi:rx="146"
sodipodi:ry="76"
transform="matrix(0.1620589,0,0,0.25666252,-0.33382188,2.2009827)" />
<path
d="m 5.4618682,23.497045 2.59294,-13.126772 5.9961898,0 c 2.59294,0.162059 3.889411,1.458533 3.889411,3.727358 0,3.889414 -3.07915,6.158237 -5.834128,5.996179 l -2.9170559,0 -0.6482379,3.403235 -3.079119,0 z m 4.3755911,-5.834117 0.8102927,-4.861768 2.106768,0 c 1.13439,0 1.944715,0.486177 1.944715,1.45853 -0.162094,2.755001 -1.458553,3.241178 -2.917071,3.403238 l -1.9447047,0 z"
id="p"
style="fill-rule:evenodd;stroke:#ffffff;stroke-width:0.32411811;stroke-linejoin:round"
inkscape:connector-curvature="0" />
<path
d="m 18.305109,20.09381 2.592939,-13.1267725 3.079118,0 -0.648239,3.4032355 2.917073,0 c 2.592954,0.162059 3.56531,1.458533 3.241193,3.079124 l -1.134446,6.644413 -3.241174,0 1.134427,-5.996179 c 0.162043,-0.810294 0.162043,-1.296471 -0.972356,-1.296471 l -2.430892,0 -1.45854,7.29265 -3.079103,0 z"
id="h"
style="stroke:#ffffff;stroke-width:0.32411811;stroke-linejoin:round"
inkscape:connector-curvature="0" />
<use
transform="translate(23.728448,-1.7015835e-7)"
id="p2"
xlink:href="#p"
x="0"
y="0"
width="300"
height="160" />
<text
xml:space="preserve"
style="font-size:14.08805084px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:128.99999619%;letter-spacing:-0.96603775px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Droid Sans Mono;-inkscape-font-specification:Droid Sans Mono Bold Italic"
x="7.638485"
y="35.075245"
id="text2992"
sodipodi:linespacing="129%"><tspan
sodipodi:role="line"
id="tspan2994"
x="7.638485"
y="35.075245"
style="font-size:14.08805084px;font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;letter-spacing:-0.96603775px;stroke:#ffffff;stroke-width:0.3018868;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol Bold Italic">FPM</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -1,127 +0,0 @@
<?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"
id="svg3201"
version="1.1"
inkscape:version="0.48.3.1 r9886"
width="48"
height="48"
sodipodi:docname="WordPressMu.svg"
inkscape:export-filename="/home/glic3rinu/orchestra/django-orchestra/orchestra/static/orchestra/icons/apps/WordPressMu.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<metadata
id="metadata3207">
<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:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3205">
<radialGradient
r="10.625"
fy="4.625"
fx="62.625"
cy="4.625"
cx="62.625"
gradientTransform="matrix(2.2657407,0,0,0.74122745,-117.89261,32.892968)"
gradientUnits="userSpaceOnUse"
id="radialGradient3610"
xlink:href="#linearGradient8838-7"
inkscape:collect="always" />
<linearGradient
id="linearGradient8838-7">
<stop
id="stop8840-0"
style="stop-color:black;stop-opacity:1"
offset="0" />
<stop
id="stop8842-7"
style="stop-color:black;stop-opacity:0"
offset="1" />
</linearGradient>
<radialGradient
r="10.625"
fy="4.625"
fx="62.625"
cy="4.625"
cx="62.625"
gradientTransform="matrix(2.2657407,0,0,0.74122745,-117.84341,35.950626)"
gradientUnits="userSpaceOnUse"
id="radialGradient3708"
xlink:href="#linearGradient8838-7"
inkscape:collect="always" />
</defs>
<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="1024"
id="namedview3203"
showgrid="false"
inkscape:zoom="5.5096774"
inkscape:cx="61.540584"
inkscape:cy="23.568076"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg3201" />
<path
inkscape:connector-curvature="0"
d="m 48.122094,39.37881 c 0,4.34954 -10.77808,7.87555 -24.0735,7.87555 -13.29542,0 -24.07349952,-3.52601 -24.07349952,-7.87555 0,-4.34955 10.77807952,-7.87556 24.07349952,-7.87556 13.29542,0 24.0735,3.52601 24.0735,7.87556 l 0,0 z"
id="path8836-9"
style="opacity:0.3;fill:url(#radialGradient3708);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.99999988;marker:none;visibility:visible;display:inline;overflow:visible" />
<rect
style="fill:#eeeeec;stroke:#eeeeec"
id="rect3747"
width="31.308554"
height="23.776344"
x="8.3035679"
y="14.241219"
ry="11.888172" />
<path
style="fill:#464342;fill-opacity:1"
d="M 19.03125 4.90625 C 15.791437 4.896058 12.606484 6.0795174 10.15625 8.375 C 7.6092021 10.76118 6.312211 14.450111 6.28125 17.8125 L 6.25 19.03125 L 5.46875 19.4375 C 3.8068539 20.293995 2.1311692 21.968811 1.1875 23.65625 C -1.095219 27.738139 -0.39657021 33.729525 2.90625 37.0625 C 4.8794402 39.053705 7.2061377 40.127815 10.28125 40.4375 C 10.493713 40.4589 17.204872 40.47795 25.1875 40.46875 L 39.6875 40.4375 L 40.625 40.1875 C 44.409275 39.18276 47.118432 36.371676 47.75 32.75 C 47.84317 32.215716 47.90625 30.63137 47.90625 30.34375 C 47.90625 29.552142 47.626845 27.993609 47.3125 27.15625 C 46.375552 24.660404 44.118781 22.499477 41.5625 21.65625 C 41.026677 21.479501 40.55624 21.3282 40.53125 21.3125 C 40.50626 21.29679 40.62504 21.03865 40.78125 20.75 C 42.216372 18.098165 41.324889 13.94101 38.78125 12.25 C 36.569496 10.779627 33.642565 10.725217 31.5625 12.125 C 31.467146 12.189168 31.45817 12.1973 31.375 12.25 C 35.289322 15.015997 37.843598 19.572186 37.84375 24.71875 C 37.84375 33.135623 31.009377 39.96875 22.59375 39.96875 C 14.177874 39.96875 7.3125 33.135623 7.3125 24.71875 C 7.3125 16.302874 14.177874 9.4375 22.59375 9.4375 C 25.479095 9.4375 28.164756 10.25928 30.46875 11.65625 C 29.357794 9.4708026 27.196338 7.4129981 24.78125 6.25 C 22.930278 5.3586557 20.975138 4.9123651 19.03125 4.90625 z M 22.59375 10.15625 C 14.563551 10.15625 8.03125 16.6888 8.03125 24.71875 C 8.03125 32.749198 14.5638 39.28125 22.59375 39.28125 C 30.623451 39.28125 37.15625 32.749198 37.15625 24.71875 C 37.15625 16.6888 30.623451 10.15625 22.59375 10.15625 z M 21.75 11.625 C 22.031322 11.606943 22.307856 11.625 22.59375 11.625 C 26.002555 11.625 29.107992 12.928322 31.4375 15.0625 C 31.380944 15.059261 31.308051 15.03125 31.25 15.03125 C 29.964162 15.03125 29.0625 16.171379 29.0625 17.375 C 29.0625 18.45355 29.680027 19.35895 30.34375 20.4375 C 30.84229 21.309757 31.4375 22.413052 31.4375 24.03125 C 31.4375 25.152154 31.003558 26.470213 30.4375 28.28125 L 29.125 32.65625 L 24.40625 18.5625 C 25.194047 18.521142 25.875 18.4375 25.875 18.4375 C 26.58033 18.354036 26.518827 17.333393 25.8125 17.375 C 25.8125 17.375 23.681802 17.53125 22.3125 17.53125 C 21.025914 17.53125 18.875 17.375 18.875 17.375 C 18.169421 17.333393 18.075671 18.396142 18.78125 18.4375 C 18.78125 18.4375 19.451169 18.521142 20.15625 18.5625 L 22.1875 24.15625 L 19.34375 32.75 L 14.5625 18.5625 C 15.351792 18.521142 16.0625 18.4375 16.0625 18.4375 C 16.767581 18.354036 16.674578 17.333393 15.96875 17.375 C 15.96875 17.375 13.869551 17.53125 12.5 17.53125 C 12.254094 17.53125 11.963446 17.509218 11.65625 17.5 C 13.851141 14.167371 17.530176 11.895861 21.75 11.625 z M 34.0625 18.4375 C 35.085241 20.302601 35.687749 22.44231 35.6875 24.71875 C 35.6875 29.549177 33.048895 33.761288 29.15625 36.03125 L 33.15625 24.46875 C 33.903686 22.601158 34.15625 21.109941 34.15625 19.78125 C 34.15625 19.299652 34.118807 18.854569 34.0625 18.4375 z M 10.625 19.375 L 16.875 36.5 C 12.507484 34.377532 9.5 29.901469 9.5 24.71875 C 9.5 22.820513 9.8984926 21.003413 10.625 19.375 z M 22.8125 25.84375 L 26.84375 36.875 C 26.86991 36.939778 26.902371 37.006442 26.9375 37.0625 C 25.57642 37.541108 24.118519 37.8125 22.59375 37.8125 C 21.30841 37.8125 20.047976 37.626067 18.875 37.28125 L 22.8125 25.84375 z "
id="path3726" />
<g
id="g22"
transform="matrix(0.21649934,0,0,0.21649934,10.650797,12.186804)" />
<g
id="g3002"
transform="matrix(0.68558415,0,0,0.68558415,6.1370097,8.023588)"
style="fill:#5c3566">
<g
transform="translate(0,-74.523003)"
id="Layer_1"
style="fill:#5c3566" />
<g
transform="matrix(0.36340573,0,0,0.36340573,1.731598,2.0710297)"
id="g6"
style="fill:#5c3566">
<g
id="g22-5"
style="fill:#5c3566" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.1 KiB

View file

@ -8,7 +8,7 @@
<div> <div>
{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %} {% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1" />{% endif %}
{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %} {% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}" />{% endif %}
<p>{% blocktrans with username=original %}Enter a new password for the user <strong>{{ username }}</strong>.{% endblocktrans %}</p> <p>{% blocktrans with username=original %}Enter a new password for the user <strong>{{ username }}</strong>, suggestion '{{ password }}'.{% endblocktrans %}</p>
{% if errors %} {% if errors %}
<p class="errornote"> <p class="errornote">

View file

@ -20,9 +20,10 @@ urlpatterns = patterns('',
name='api-token-auth' name='api-token-auth'
), ),
# TODO make this private # TODO make this private
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True} 'document_root': settings.MEDIA_ROOT,
) 'show_indexes': True
})
) )