Changeset - ce6174de6d4b
www/conservancy/apps/fundgoal/admin.py
Show inline comments
 
from django.contrib import admin
 
from conservancy.apps.fundgoal.models import FundraisingGoal
 
from conservancy.apps.fundgoal import models as fundgoal_models
 

	
 
class FundraisingGoalAdmin(admin.ModelAdmin):
 
    list_display = ('fundraiser_code_name', 'fundraiser_goal_amount')
 

	
 
admin.site.register(FundraisingGoal, FundraisingGoalAdmin)
 
class GoalProviderAdmin(admin.ModelAdmin):
 
    fields = [
 
        'fundraising_goal',
 
        'provider_name',
 
    ]
 

	
 
admin.site.register(fundgoal_models.FundraisingGoal, FundraisingGoalAdmin)
 
admin.site.register(fundgoal_models.GoalProvider, GoalProviderAdmin)
www/conservancy/apps/fundgoal/migrations/0001_initial.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
# Generated by Django 1.10.7 on 2018-11-18 12:09
 
from __future__ import unicode_literals
 

	
 
from django.db import migrations, models
 

	
 

	
 
class Migration(migrations.Migration):
 

	
 
    initial = True
 

	
 
    dependencies = [
 
    ]
 

	
 
    operations = [
 
        migrations.CreateModel(
 
            name='FundraisingGoal',
 
            fields=[
 
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 
                ('fundraiser_code_name', models.CharField(max_length=200, unique=True)),
 
                ('fundraiser_goal_amount', models.DecimalField(decimal_places=2, max_digits=10)),
 
                ('fundraiser_so_far_amount', models.DecimalField(decimal_places=2, max_digits=10)),
 
                ('fundraiser_donation_count', models.IntegerField()),
 
                ('fundraiser_donation_count_disclose_threshold', models.IntegerField()),
 
            ],
 
            options={
 
                'ordering': ('fundraiser_code_name',),
 
            },
 
        ),
 
    ]
www/conservancy/apps/fundgoal/migrations/0002_goalprovider.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
# Generated by Django 1.10.7 on 2018-11-18 12:11
 
from __future__ import unicode_literals
 

	
 
from django.db import migrations, models
 
import django.db.models.deletion
 

	
 

	
 
class Migration(migrations.Migration):
 

	
 
    dependencies = [
 
        ('fundgoal', '0001_initial'),
 
    ]
 

	
 
    operations = [
 
        migrations.CreateModel(
 
            name='GoalProvider',
 
            fields=[
 
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
 
                ('provider_name', models.CharField(max_length=512)),
 
                ('fundraising_goal', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fundgoal.FundraisingGoal')),
 
            ],
 
        ),
 
    ]
www/conservancy/apps/fundgoal/migrations/__init__.py
Show inline comments
 
new file 100644
www/conservancy/apps/fundgoal/models.py
Show inline comments
 
import random
 

	
 
from django.db import models
 
from decimal import *
 

	
 
class FundraisingGoal(models.Model):
 
    """Conservancy fundraiser Goal"""
 

	
 
    fundraiser_code_name      = models.CharField(max_length=200, blank=False, unique=True)
 
    fundraiser_goal_amount   = models.DecimalField(max_digits=10, decimal_places=2)
...
 
@@ -11,10 +12,33 @@ class FundraisingGoal(models.Model):
 
    fundraiser_donation_count_disclose_threshold = models.IntegerField()
 

	
 
    def __unicode__(self):
 
        return self.fundraiser_code_name
 

	
 
    def percentage_there(self):
 
        return (self.fundraiser_so_far_amount / self.fundraiser_goal_amount ) * Decimal('100.00')
 
        return (self.fundraiser_so_far_amount / self.fundraiser_goal_amount ) * 100
 
    
 
    class Meta:
 
        ordering = ('fundraiser_code_name',)
 

	
 
    def providers(self):
 
        return GoalProvider.objects.filter(fundraising_goal=self)
 

	
 
    def random_providers(self, k=None):
 
        providers = self.providers()
 
        if not providers.exists():
 
            return None
 
        elif k is None:
 
            return random.choice(providers)
 
        else:
 
            return random.sample(providers, k)
 

	
 

	
 
class GoalProvider(models.Model):
 
    fundraising_goal = models.ForeignKey(
 
        'FundraisingGoal',
 
        on_delete=models.CASCADE,
 
    )
 
    provider_name = models.CharField(max_length=512)
 

	
 
    def __unicode__(self):
 
        return self.provider_name
www/conservancy/local_context_processors.py
Show inline comments
...
 
@@ -6,13 +6,13 @@ def fundgoal_lookup(fundraiser_sought):
 
        return FundraisingGoal.objects.get(fundraiser_code_name=fundraiser_sought)
 
    except FundraisingGoal.DoesNotExist:
 
        # we have no object!  do something
 
        return None
 

	
 
def sitefundraiser(request):
 
    return {'sitefundgoal': fundgoal_lookup('fy-2018-main-match') }
 
    return {'sitefundgoal': fundgoal_lookup('cy2018-end-year-match') }
 

	
 
if conservancy.settings.FORCE_CANONICAL_HOSTNAME:
 
    _HOST_URL_VAR = {'host_url': 'https://' + conservancy.settings.FORCE_CANONICAL_HOSTNAME}
 
    def host_url(request):
 
        return _HOST_URL_VAR
 
else:
www/conservancy/static/img/2018-11_Molly-de-Blanc-match-announcement-poster.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
www/conservancy/static/img/projects/racket.svg
Show inline comments
 
new file 100644
 
<?xml version="1.0" encoding="UTF-8"?>
 
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1140pt" height="320pt" viewBox="0 0 1140 320" version="1.1">
 
<defs>
 
<g>
 
<symbol overflow="visible" id="glyph0-0">
 
<path style="stroke:none;" d=""/>
 
</symbol>
 
<symbol overflow="visible" id="glyph0-1">
 
<path style="stroke:none;" d="M 37.960938 -82.421875 L 75.398438 -82.421875 C 78.519531 -82.421875 81.640625 -82.421875 84.761719 -82.679688 L 117 0 L 137.539062 0 L 102.441406 -86.320312 C 121.679688 -92.558594 137.539062 -107.640625 137.539062 -139.878906 L 137.539062 -145.078125 C 137.539062 -191.878906 104.261719 -202.800781 75.398438 -202.800781 L 19.238281 -202.800781 L 19.238281 0 L 37.960938 0 Z M 37.960938 -99.320312 L 37.960938 -185.898438 L 75.921875 -185.898438 C 93.339844 -185.898438 118.300781 -179.398438 118.300781 -144.558594 L 118.300781 -140.660156 C 118.300781 -105.820312 93.339844 -99.320312 75.921875 -99.320312 Z M 37.960938 -99.320312 "/>
 
</symbol>
 
<symbol overflow="visible" id="glyph0-2">
 
<path style="stroke:none;" d="M 102.960938 0 L 118.039062 0 L 116.480469 -39 L 116.480469 -89.441406 C 116.480469 -119.859375 104.78125 -140.660156 66.558594 -140.660156 C 26 -140.660156 16.898438 -115.441406 16.898438 -94.640625 L 16.898438 -92.300781 L 34.320312 -92.300781 C 34.320312 -110.238281 40.300781 -125.320312 66.300781 -125.320312 C 90.738281 -125.320312 98.28125 -113.101562 98.28125 -89.441406 L 98.28125 -85.800781 L 56.679688 -79.300781 C 34.320312 -75.921875 11.699219 -67.339844 11.699219 -37.441406 L 11.699219 -34.839844 C 11.699219 -12.738281 26.261719 2.859375 51.480469 2.859375 C 75.398438 2.859375 91 -7.28125 100.101562 -19.238281 Z M 56.160156 -13 C 37.699219 -13 29.898438 -24.179688 29.898438 -36.398438 L 29.898438 -38.738281 C 29.898438 -54.339844 40.558594 -62.921875 58.238281 -66.039062 L 98.28125 -72.539062 L 98.28125 -34.839844 C 93.339844 -26.78125 81.640625 -13 56.160156 -13 Z M 56.160156 -13 "/>
 
</symbol>
 
<symbol overflow="visible" id="glyph0-3">
 
<path style="stroke:none;" d="M 31.199219 -65.78125 L 31.199219 -72.019531 C 31.199219 -103.480469 43.160156 -124.28125 70.460938 -124.28125 C 95.421875 -124.28125 105.558594 -108.421875 105.558594 -87.359375 L 122.980469 -87.359375 L 122.980469 -92.558594 C 122.980469 -114.921875 108.160156 -140.660156 70.199219 -140.660156 C 29.898438 -140.660156 12.738281 -110.238281 12.738281 -72.019531 L 12.738281 -65.78125 C 12.738281 -27.558594 29.898438 2.859375 70.199219 2.859375 C 108.160156 2.859375 122.980469 -21.839844 122.980469 -43.679688 L 122.980469 -47.839844 L 105.558594 -47.839844 C 105.558594 -29.898438 96.199219 -13.519531 70.460938 -13.519531 C 43.160156 -13.519531 31.199219 -34.320312 31.199219 -65.78125 Z M 31.199219 -65.78125 "/>
 
</symbol>
 
<symbol overflow="visible" id="glyph0-4">
 
<path style="stroke:none;" d="M 16.898438 0 L 35.101562 0 L 35.101562 -40.558594 L 63.441406 -71.761719 L 102.441406 0 L 123.238281 0 L 75.921875 -85.539062 L 123.238281 -137.800781 L 100.621094 -137.800781 L 35.101562 -65 L 35.101562 -208 L 16.898438 -208 Z M 16.898438 0 "/>
 
</symbol>
 
<symbol overflow="visible" id="glyph0-5">
 
<path style="stroke:none;" d="M 128.699219 -61.359375 L 128.699219 -71.761719 C 128.699219 -109.980469 111.28125 -140.660156 70.980469 -140.660156 C 30.679688 -140.660156 12.738281 -109.980469 12.738281 -71.761719 L 12.738281 -66.039062 C 12.738281 -27.820312 30.679688 2.859375 72.28125 2.859375 C 111.019531 2.859375 128.699219 -21.839844 128.699219 -43.160156 L 128.699219 -44.199219 L 111.28125 -44.199219 C 111.28125 -29.378906 99.839844 -12.480469 72.28125 -12.480469 C 44.71875 -12.480469 31.980469 -31.199219 31.199219 -61.359375 Z M 70.71875 -125.320312 C 96.980469 -125.320312 109.199219 -106.339844 110.238281 -76.441406 L 31.199219 -76.441406 C 31.980469 -106.339844 44.71875 -125.320312 70.71875 -125.320312 Z M 70.71875 -125.320312 "/>
 
</symbol>
 
<symbol overflow="visible" id="glyph0-6">
 
<path style="stroke:none;" d="M 48.101562 -137.800781 L 48.101562 -176.800781 L 29.898438 -176.800781 L 29.898438 -137.800781 L 8.058594 -137.800781 L 8.058594 -121.421875 L 29.898438 -121.421875 L 29.898438 -38.21875 C 29.898438 -8.320312 46.800781 2.859375 70.199219 2.859375 C 81.121094 2.859375 87.359375 0.78125 89.441406 0 L 89.441406 -15.859375 C 87.359375 -14.820312 80.339844 -13.519531 74.621094 -13.519531 C 57.199219 -13.519531 48.101562 -18.71875 48.101562 -40.558594 L 48.101562 -121.421875 L 92.039062 -121.421875 L 92.039062 -137.800781 Z M 48.101562 -137.800781 "/>
 
</symbol>
 
</g>
 
</defs>
 
<g id="surface1">
 
<rect x="0" y="0" width="1140" height="320" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
 
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(24.313725%,35.686275%,66.27451%);fill-opacity:1;" d="M 272.160156 247.859375 C 291.167969 223.660156 302.507812 193.152344 302.507812 159.992188 C 302.507812 81.367188 238.765625 17.628906 160.140625 17.628906 C 143.039062 17.628906 126.640625 20.644531 111.449219 26.175781 C 169.246094 56.492188 245.695312 155.410156 272.160156 247.859375 Z M 272.160156 247.859375 "/>
 
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(62.352941%,11.372549%,12.54902%);fill-opacity:1;" d="M 139.75 108.441406 C 117.542969 84.515625 92.671875 65.515625 66.332031 52.914062 C 36.574219 79.007812 17.777344 117.300781 17.777344 159.992188 C 17.777344 195.886719 31.066406 228.675781 52.988281 253.71875 C 72.3125 195.65625 108.640625 139.699219 139.75 108.441406 Z M 139.75 108.441406 "/>
 
<path style=" stroke:none;fill-rule:evenodd;fill:rgb(62.352941%,11.372549%,12.54902%);fill-opacity:1;" d="M 165.984375 140.722656 C 135.164062 173.9375 104.449219 232.082031 93.335938 285.730469 C 113.257812 296.335938 135.996094 302.359375 160.140625 302.359375 C 184.964844 302.359375 208.300781 295.996094 228.621094 284.828125 C 216.910156 230.714844 194.800781 181.152344 165.984375 140.722656 Z M 165.984375 140.722656 "/>
 
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
 
  <use xlink:href="#glyph0-1" x="350" y="267"/>
 
  <use xlink:href="#glyph0-2" x="501.839844" y="267"/>
 
  <use xlink:href="#glyph0-3" x="634.958984" y="267"/>
 
  <use xlink:href="#glyph0-4" x="770.678711" y="267"/>
 
  <use xlink:href="#glyph0-5" x="893.138672" y="267"/>
 
  <use xlink:href="#glyph0-6" x="1031.458008" y="267"/>
 
</g>
 
</g>
 
</svg>
www/conservancy/static/img/projects/xapian.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
www/conservancy/static/projects/current/index.html
Show inline comments
...
 
@@ -576,12 +576,26 @@ to encode low level details into it.</li></ul>
 
        native performances by executing the guest code directly on the host
 
        CPU. QEMU supports
 
 virtualization when executing under the Xen hypervisor or using the
 
        KVM kernel module in Linux. When using KVM, QEMU can virtualize x86,
 
        server and embedded PowerPC, and S390 guests.</p>
 

	
 
<h2><a href="https://racket-lang.org">Racket</a></h2>
 

	
 
<img class="project-logo" src="../../img/projects/racket.svg" alt="" />
 

	
 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
 
<input type="hidden" name="cmd" value="_s-xclick">
 
<input type="hidden" name="hosted_button_id" value="URMNGBCTB96G2">
 
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" name="submit" alt="Donate to Racket via PayPal">
 
</form>
 

	
 
<p>Racket is a general-purpose programming language as well as the world’s
 
first ecosystem for language-oriented programming. Make your dream language,
 
or use one of the dozens already available.</p>
 

	
 
<h2><a href="https://reproducible-builds.org">Reproducible Builds</a></h2>
 

	
 
<img class="project-logo" src="../../img/projects/2018-10_Reproducible-Builds.svg" alt="" />
 

	
 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
 
<input type="hidden" name="cmd" value="_s-xclick">
...
 
@@ -794,7 +808,22 @@ completely free alternative implementation of the Windows API
 
consisting of 100% non-Microsoft code, however Wine can optionally use
 
native Windows DLLs if they are available. Wine provides both a
 
development toolkit for porting Windows source code to Unix as well as
 
a program loader, allowing many unmodified Windows programs to run on
 
x86-based Unixes, including Linux, Mac OS X, FreeBSD, and Solaris.</p>
 

	
 
<h2><a href="https://xapian.org/">Xapian</a></h2>
 

	
 
<img class="project-logo" src="../../img/projects/xapian.png" alt="" />
 

	
 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
 
<input type="hidden" name="cmd" value="_s-xclick">
 
<input type="hidden" name="hosted_button_id" value="Y8WL47RVZJ3LQ">
 
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif" name="submit" alt="Donate to Xapian via PayPal">
 
</form>
 

	
 
<p>Xapian is a highly adaptable toolkit which allows developers to
 
easily add advanced indexing and search facilities to their own
 
applications. It has built-in support for several families of weighting
 
models and also supports a rich set of boolean query operators.</p>
 

	
 
{% endblock %}
www/conservancy/templates/base_conservancy.html
Show inline comments
...
 
@@ -60,24 +60,26 @@ this_match_goal: The amount being matched
 
this_match_so_far: The amount contributed so far
 
this_match_remaining: this_match_goal - this_match_so_far
 

	
 
{% endcomment %}
 

	
 
{% comment %}
 
{% if sitefundgoal and sitefundgoal.fundraiser_so_far_amount %}
 
{% if sitefundgoal %}
 
{% with this_match_goal=sitefundgoal.fundraiser_goal_amount this_match_so_far=sitefundgoal.fundraiser_so_far_amount %}
 
{% with this_match_remaining=this_match_goal|subtract:this_match_so_far %}
 
    <div class="fundraiser-top-text">
 
      <p>
 
        {% if this_match_remaining <= 0 %}
 
        Thanks to {{ sitegoal.fundraiser_donation_count|intcomma }} Supporters we earned our full match!  Help us go further to stand up for software
 
        freedom &mdash; <a href="/supporter">sign up now</a>!
 
        {% else %}
 
        The next ${{ this_match_remaining|floatformat:0|intcomma }} of support we receive will be matched thanks to Private Internet Access and an anonymous donor!  <a href="/supporter/">Support Conservancy today!</a>
 
        The next ${{ this_match_remaining|floatformat:0|intcomma }} of support we receive will be matched thanks to Private Internet Access and a group of generous donors, including {{ sitefundgoal.random_providers }}!  <a href="/supporter/">Support Conservancy today!</a>
 
        {% endif %}
 
      </p>
 

	
 
{% if sitefundgoal.fundraiser_so_far_amount %}
 
<div id="siteprogressbar">
 
<a href="/supporter">
 
  We've matched
 
  {% if this_match_remaining <= 0 %}
 
  $<span id="site-fundraiser-match-count">{{ this_match_goal|intcomma }}</span>
 
  {% else %}
...
 
@@ -85,12 +87,14 @@ this_match_remaining: this_match_goal - this_match_so_far
 
  {% endif %}
 
  of
 
  $<span id="site-fundraiser-final-goal">{{ this_match_goal|intcomma }}</span>
 
  so far!
 
</a>
 
</div>
 
{% endif %}
 

	
 
</div>
 
{% endwith %}
 
{% endwith %}
 
{% endif %}
 
{% endcomment %}
 

	
www/manage.py
Show inline comments
 
new file 100755
 
#!/usr/bin/env python
 

	
 
import os
 
import sys
 

	
 
if __name__ == "__main__":
 
    www_path = os.path.abspath(os.path.dirname(sys.argv[0]))
 
    if www_path not in sys.path:
 
        sys.path.append(www_path)
 

	
 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "conservancy.settings")
 

	
 
    from django.core.management import execute_from_command_line
 

	
 
    execute_from_command_line(sys.argv)
0 comments (0 inline, 0 general)