add rh agreement form

pull/46/head
eric 2017-11-07 10:43:40 -05:00
parent 52c9632f53
commit 96f40a8514
14 changed files with 327 additions and 52 deletions

View File

@ -0,0 +1,59 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0010_userprofile_works'),
]
operations = [
migrations.RenameField(
model_name='rightsholder',
old_name='can_sell',
new_name='approved',
),
migrations.AddField(
model_name='rightsholder',
name='address',
field=models.CharField(default=b'', max_length=400),
),
migrations.AddField(
model_name='rightsholder',
name='mailing',
field=models.CharField(default=b'', max_length=400),
),
migrations.AddField(
model_name='rightsholder',
name='signature',
field=models.CharField(default=b'', max_length=100),
),
migrations.AddField(
model_name='rightsholder',
name='signer',
field=models.CharField(default=b'', max_length=100),
),
migrations.AddField(
model_name='rightsholder',
name='signer_ip',
field=models.CharField(max_length=20, null=True),
),
migrations.AddField(
model_name='rightsholder',
name='signer_title',
field=models.CharField(default=b'', max_length=30),
),
migrations.AddField(
model_name='rightsholder',
name='telephone',
field=models.CharField(max_length=30, blank=True),
),
migrations.AlterField(
model_name='rightsholder',
name='email',
field=models.CharField(default=b'', max_length=100),
),
]

View File

@ -201,10 +201,18 @@ post_save.connect(notify_claim, sender=Claim)
class RightsHolder(models.Model):
created = models.DateTimeField(auto_now_add=True)
email = models.CharField(max_length=100, blank=True)
email = models.CharField(max_length=100, blank=False, default='')
rights_holder_name = models.CharField(max_length=100, blank=False)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, related_name="rights_holder", null=False)
can_sell = models.BooleanField(default=False)
approved = models.BooleanField(default=False)
address = models.CharField(max_length=400, blank=False, default='')
mailing = models.CharField(max_length=400, blank=False, default='')
telephone = models.CharField(max_length=30, blank=True)
signer = models.CharField(max_length=100, blank=False, default='')
signer_ip = models.CharField(max_length=20, null=True)
signer_title = models.CharField(max_length=30, blank=False, default='')
signature = models.CharField(max_length=100, blank=False, default='' )
def __unicode__(self):
return self.rights_holder_name

View File

@ -64,6 +64,8 @@ from regluit.utils.fields import ISBNField
from .bibforms import EditionForm, IdentifierForm
from .rh_forms import RightsHolderForm
from questionnaire.models import Questionnaire
logger = logging.getLogger(__name__)
@ -192,32 +194,6 @@ def UserClaimForm ( user_instance, *args, **kwargs ):
return ClaimForm()
class RightsHolderForm(forms.ModelForm):
owner = AutoCompleteSelectField(
OwnerLookup,
label='Owner',
widget=AutoCompleteSelectWidget(OwnerLookup),
required=True,
error_messages={'required': 'Please ensure the owner is a valid Unglue.it account.'},
)
email = forms.EmailField(
label=_("notification email address for rights holder"),
max_length=100,
error_messages={'required': 'Please enter an email address for the rights holder.'},
)
class Meta:
model = RightsHolder
exclude = ()
def clean_rights_holder_name(self):
rights_holder_name = self.data["rights_holder_name"]
try:
RightsHolder.objects.get(rights_holder_name__iexact=rights_holder_name)
except RightsHolder.DoesNotExist:
return rights_holder_name
raise forms.ValidationError(_("Another rights holder with that name already exists."))
class ProfileForm(forms.ModelForm):
clear_facebook = forms.BooleanField(required=False)
clear_twitter = forms.BooleanField(required=False)

View File

@ -0,0 +1,65 @@
from django import forms
from regluit.core.models import RightsHolder
class RightsHolderForm(forms.ModelForm):
email = forms.EmailField(
help_text='notification email address for rights holder',
max_length=100,
error_messages={
'required': 'Please enter a contact email address for the rights holder.'
},
)
use4both = forms.BooleanField(label='use business address as mailing address')
def clean_rights_holder_name(self):
rights_holder_name = self.data["rights_holder_name"]
try:
RightsHolder.objects.get(rights_holder_name__iexact=rights_holder_name)
except RightsHolder.DoesNotExist:
return rights_holder_name
raise forms.ValidationError('Another rights holder with that name already exists.')
class Meta:
model = RightsHolder
exclude = ('approved', 'signer_ip')
widgets = {
'address': forms.Textarea(attrs={'rows': 4}),
'mailing': forms.Textarea(attrs={'rows': 4}),
'owner': forms.HiddenInput()
}
help_texts = {
'signature': 'Type your name to enter your electronic signature.',
'rights_holder_name': 'Enter the rights holder\'s legal name.',
}
error_messages = {
'address': {
'required': 'A business address for the rights holder is required.'
},
'mailing': {
'required': 'Enter a mailing address for the rights holder, if different from the \
business address.'
},
'rights_holder_name': {
'required': 'Enter the rights holder\'s legal name.'
},
'signature': {
'required': 'Type your name to enter your electronic signature.'
},
'signer': {
'required': 'Please enter the name of the person signing on behalf of the rights \
holder.'
},
'signer_title': {
'required': 'Please enter the signer\'s title. (Use \'self\' if you are \
personally the rights holder.)'
},
}
'''class RightsHolderApprovalForm(RightsHolderForm):
owner = AutoCompleteSelectField(
OwnerLookup,
label='Owner',
widget=AutoCompleteSelectWidget(OwnerLookup),
required=True,
)
'''

View File

@ -0,0 +1,19 @@
{% extends 'basedocumentation.html' %}
{% block title %} Agreement Submitted {% endblock %}
{% block extra_extra_head %}
{{ block.super }}
<link rel="stylesheet" href="/static/css/ui-lightness/jquery-ui-1.8.16.custom.css" type="text/css" media="screen">
<script type="text/javascript" src="{{ jquery_ui_home }}"></script>
{% endblock %}
{% block topsection %}
{% endblock %}
{% block doccontent %}
<h2>You're a pending Unglue.it Rights Holder!</h2>
Your Unglue.it Rights Holder Agreement has been submitted. Our staff will verify your existence and email you a countersigned agreement. At that point, you'll be able to use all of the Unglue.it rights holder tools.
{% endblock %}

View File

@ -135,8 +135,9 @@
<ul>
{% if user.is_authenticated %}
<li><a href="{% url 'manage_account' %}">Account Settings</a></li>
<li><a href="{% url 'new_edition' '' '' %}">Add Books to Unglue.it</a></li>
{% endif %}
<li><a href="{% url 'rightsholders' %}">Rights Holder Tools</a></li>
<li><a href="{% url 'rightsholders' %}">For Rights Holders</a></li>
<li><a href="{% url 'privacy' %}">Privacy</a></li>
<li><a href="{% url 'terms' %}">Terms of Use</a></li>
{% for library in user.libraries.all %}
@ -144,7 +145,6 @@
{% endfor %}
{% if user.is_staff %}
<li><a href="{% url 'rh_admin' %}">Unglue.it Administration</a></li>
<li><a href="{% url 'new_edition' '' '' %}">Create New Editions</a></li>
{% endif %}
</ul>
</div>

View File

@ -117,7 +117,6 @@ Please fix the following before launching your campaign:
{% csrf_token %}
{{ form.media }}
<h3>Edit the editions (if needed)</h3>
{% if campaign.rh.can_sell %}
{% if campaign.work.ebookfiles.0 %}
<p>You have uploaded ebook files for this work. </p>
{% else %}
@ -128,7 +127,6 @@ Please fix the following before launching your campaign:
<p> To distribute ebooks as part of a thanks for ungluing campaign, you will need to upload the ebook files to unglue.it. </p>
{% endifequal %}
{% endif %}
{% endif %}
<p> Please choose the edition that most closely matches the edition to be unglued. This is the edition whose cover image will display on your book's page. Your unglued edition should be identical to this edition if possible; you should note any differences under Rights Details below.</p>
{{ form.edition.errors }}
@ -138,13 +136,11 @@ Please fix the following before launching your campaign:
<ul style="text-indent:1em">
<li style="text-indent:2.5em"><a href="{% url 'new_edition' edition.work_id edition.id %}"> Edit </a> this edition</li>
{% ifnotequal campaign.type 1 %}
{% if campaign.rh.can_sell %}
{% if edition.ebook_files.all.0 %}
<li style="text-indent:2.5em">You have uploaded ebook files for this edition. You can <a href="{% url 'edition_uploads' edition.id %}"> manage its ebooks or upload another</a></li>
{% else %}
<li style="text-indent:2.5em">You can <a href="{% url 'edition_uploads' edition.id %}"> Manage ebooks</a> for this edition.</li>
{% endif %}
{% endif %}
{% endifnotequal %}
</ul>
</p>

View File

@ -0,0 +1,30 @@
<h2>Unglue Program Terms</h2>
<h3><strong><em>Pledge-to-Unglue Program</em></strong></h3>
<p><strong>1. Description. </strong>Under the Pledge-to-Unglue program, the Rights Holder conducts a pledge campaign to raise a designated level of donated funds to facilitate the immediate Ungluing of an Uploaded Uploaded Work. The Ungluing Date shall be scheduled no later than 90 days after the Campaign Goal has been met.</p>
<p><strong>2. Campaign Goal Specifications</strong>. The Rights Holder will designate, for each Uploaded Work:</p>
<p style="text-indent: 36pt">(a) the dollar amount for the Campaign Goal;</p>
<p style="text-indent: 36pt">(b) the date upon which the campaign will commence;</p>
<p style="text-indent: 36pt">(c) the date upon which the campaign will end.</p>
<p style="text-indent: 36pt">Once an Unglue.it campaign has been launched, the Campaign Goal cannot be increased at any time for any reason.</p>
<p style="text-align: left;"><strong>3. Unglue.it Service Fees.</strong></p>
<p style="text-align: left;"><em> <strong>Processing Fee</strong></em> in the amount of the greater of $60 or six percent (6%) of total gross aggregate contributions received in connection with the campaign. All Processing Fees shall be payable out of the proceeds of a successfully completed campaign, and shall be payable in addition to third party payment processing fees.</p>
<h3><strong><em>Buy-to-Unglue Program</em></strong></h3>
<p><strong>1. Description.</strong> Under the Buy-to-Unglue program, the Rights Holder charges a <strong><em>License Fee </em></strong>to make copies of a Uploaded Work available to individuals, libraries and institutions through Unglue.it and agrees to Unglue the Uploaded Work once the Rights Holders designated sales target has been met. The Ungluing Date is determined by the fraction of the Campaign goal that has been met, together with the Campaign Goal Specifications.</p>
<p><strong>2. Campaign Goal Specifications</strong>. The Rights Holder will designate, for each Uploaded Work:</p>
<p style="text-indent: 36pt">(a) the dollar amount for the Campaign Goal;</p>
<p style="text-indent: 36pt">(b) the initial Ungluing Date*;</p>
<p style="text-indent: 36pt">(c) the date upon which the campaign will commence;</p>
<p style="text-indent: 36pt">(d) the License Fees.</p>
<p style="text-indent: 36pt">Once an Unglue.it campaign has been launched, the Campaign Goal cannot be increased at any time for any reason, and the initial Ungluing Date cannot be changed. Notwithstanding the above, the License Fees can be increased or decreased at any time at the sole discretion of the Rights Holder.</p>
<p style="text-indent: 36pt"><em>*In the case of the Buy-to-Unglue program, the Ungluing Date advances according to the progress towards the Campaign Goal. The mechanism of advance shall be determined by the website terms of service in effect on the date of the launch of the campaign.</em></p>
<p><strong><em>3</em>. Unglue.it Service Fees</strong></p>
<p>(a) <strong><em>Distribution Fee</em></strong> in the amount of twenty-five percent (25%) of the gross revenues received by the Distributor from (i) the sale of the Uploaded Works through the Program; (ii) the licensing of the Uploaded Works by the Distributor to libraries and other third party distributors; and (iii) from any other sources in connection with the distribution of the Uploaded Work by the Distributor.</p>
<p>(b) <strong><em>Transaction Fee</em></strong> in the amount of twenty-five cents ($0.25) per transaction.</p>
<p>The Distribution Fee and Transaction Fee shall be deducted from proceeds of sale and other license fees collected by the Distributor, and paid to the Distributor prior to the remission of revenues to the Rights Holder. The Distribution Fee is inclusive of third party processing fees up to a cap of 3% of the gross amount plus 33 cents ($0.33) per transaction.</p>
<h3><strong><em>Thanks-for-Ungluing Program</em></strong></h3>
<p><strong>1. Description.</strong> Under the Thanks-for-Ungluing program, the Rights Holder immediately releases an Unglued Edition to the licensee, but suggests a “Thank-You” donation amount. The licensee has the option of paying the suggested “Thank You” donation, or a greater or lesser amount (may be zero).</p>
<p><strong>2. Campaign Goal Specifications</strong>. The Rights Holder will designate a suggested “Thank You” donation amount for each Uploaded Work.</p>
<p><strong>3. Unglue.it Service Fees</strong></p>
<p style="text-indent: 36pt">(a) <strong><em>Distribution Fee</em></strong> in the amount of eight percent (8%) of the gross revenues received by the Distributor from payments made as “Thank You” donations.</p>
<p style="text-indent: 36pt">(b) <strong><em>Transaction Fee</em></strong> in the amount of twenty-five cents ($0.25) per transaction.</p>
<p style="text-indent: 36pt">The Distribution Fee and Transaction Fee shall be deducted from the donations collected by the Distributor, and paid to the Distributor prior to the remission of revenues to the Rights Holder. The Distribution Fee is inclusive of third party payment processing fees up to a cap of 3% of the gross amount plus 33 cents ($0.33) per transaction.</p>

View File

@ -0,0 +1,111 @@
{% extends 'basedocumentation.html' %}
{% block title %} Rights Holder Agreement {% endblock %}
{% block extra_extra_head %}
{{ block.super }}
<link rel="stylesheet" href="/static/css/ui-lightness/jquery-ui-1.8.16.custom.css" type="text/css" media="screen">
<script type="text/javascript" src="{{ jquery_ui_home }}"></script>
<script type="text/javascript">
onload = function(){
var rhInput = document.getElementById('id_rights_holder_name');
var rhDisplay = document.getElementById('rh_name');
var rhstInput = document.getElementById('id_signer_title');
var rhstDisplay = document.getElementById('rh_signer_title');
var rhaInput = document.getElementById('id_address');
var use4both = document.getElementById('id_use4both');
var rhmInput = document.getElementById('id_mailing');
rhaInput.oninput = function(){
if (use4both.checked == true) {rhmInput.value = rhaInput.value;};
};
use4both.onchange = function(){
if (use4both.checked == true) {rhmInput.value = rhaInput.value;};
};
rhInput.oninput = function(){
rhDisplay.innerHTML = rhInput.value;
};
rhstInput.oninput = function(){
rhstDisplay.innerHTML = rhstInput.value;
};
};
</script>
{% endblock %}
{% block topsection %}
{% endblock %}
{% block doccontent %}
{% if request.user.is_authenticated %}
<div id="doc-wrapper">
<div class="doc-sign" id="doc-content">
<form method="POST" action="#" > {% csrf_token %} {{ form.owner }}
<p style="text-align: center;"><strong>UNGLUE.IT RIGHTS HOLDER AGREEMENT</strong></p>
{{ form.rights_holder_name.errors }}
<p style="text-align: justify;"><strong>Rights Holder:</strong> {{ form.rights_holder_name }}</p>
<p style="text-align: justify;"><strong>Unglue.it Username for Rights Holder:</strong> <span class="rh_data">{{ request.user.username }}</span></p>
{{ form.address.errors }}
<p style="text-align: justify;"><strong>Business Address: </strong> <br /> {{ form.address }}</p>
{{ form.mailing.errors }}
<p style="text-align: justify;"><strong>Mailing Address: </strong> copy from Business Address {{ form.use4both }}<br /> {{ form.mailing }}</p>
{{ form.telephone.errors }}{{ form.email.errors }}
<p style="text-align: justify;"> <strong>Tel:</strong> {{ form.telephone }} <strong>Email:</strong> {{ form.email }}</p>
{{ form.signer.errors }}
<p style="text-align: justify;">Signer Name: {{ form.signer }}</p>
{{ form.signer_title.errors }}
<p style="text-align: justify;">Signer Title: {{ form.signer_title }}</p>
<p><strong>FREE EBOOK FOUNDATION, INC.</strong>, a New Jersey Not-for-profit corporation (<strong><em>Distributor</em></strong>), and the above described <strong><em>Rights Holder</em></strong>, agree as follows:</p>
<p style="text-indent: 0pt"><strong>1. Parties.</strong> The Distributor is the owner and operator of <strong><em>Unglue.it</em></strong>, a platform for the digital distribution of written materials via the unglue.it website and any other URLs designated by the Distributor for such purpose. The Rights Holder is the copyright owner or authorized publisher or licensed distributor of certain published written materials which the Rights Holder wants to distribute on Unglue.it.</p>
<p style="text-indent: 0pt"><strong style="text-indent: 0pt">2. Purpose.</strong> This Agreement sets forth the rights and obligations of the parties and applies to all written materials uploaded by the Rights Holder onto the Unglue.it platform using the Unglue.it web interface (individually, a <strong style="text-indent: 0pt"><em>Uploaded Work</em></strong><em style="text-indent: 0pt"> </em>and collectively, <strong style="text-indent: 0pt"><em>Uploaded Works</em></strong>). The parties intend to collaborate in the release and distribution of the Uploaded Works under a Creative Commons License or such other "free" license as shall then pertain to release of creative works (<strong style="text-indent: 0pt"><em>CC License</em></strong>). For works not yet released under such a license, the date that the Rights Holder agrees, as determined by terms of the applicable Programs, to release a Uploaded Work under a CC License pursuant to this Agreement shall be referred to as the <strong style="text-indent: 0pt"><em>Ungluing Date.</em></strong></p>
<p style="text-indent: 0pt"><strong style="text-indent: 0pt">3. Term and Termination.</strong> The term of this Agreement shall begin on the Effective Date. Either party may terminate this Agreement at any time upon thirty (30) days notice to the other party. All licenses issued to third parties during the Term are irrevocable (except in the case of a breach by the third party licensee) and shall survive termination. In particular, the Rights Holder must release of the Uploaded Works pursuant to a CC License on or before the determined Ungluing Date, even if the Ungluing Date occurs after the termination of this Agreement.</p>
<p style="text-indent: 0pt"><strong style="text-indent: 0pt">4. Programs. </strong>The Distributor has one or more models for the distribution and release of Uploaded Works on Unglue.it, as specified in the <strong><em>Program Terms</em></strong>. Under each Program, the Rights Holder agrees to release and distribute the Uploaded Work in a digital format under a CC License (<strong><em>Unglue</em></strong> the Uploaded Work) pursuant to the applicable Program Terms.</p>
<p style="text-indent: 0pt"><strong style="text-indent: 0pt">5. Grant of Rights.</strong> The Rights Holder hereby authorizes the Distributor as follows:</p>
<p style="text-indent: 0pt">(a) to display and market Uploaded Works on the Platform, and to copy and transmit Uploaded Works as may be required in order to fulfill its obligations to Ungluers and other licensees pursuant to the terms of use set forth on the Unglue.it website or any applicable licensing agreement or CC License as applicable;</p>
<p style="text-indent: 36pt">(b) to use the Rights Holders name or trademark in association with Uploaded Works or for promotional or editorial purposes in connection with the Programs;</p>
<p style="text-indent: 36pt">(c) to collect revenues on behalf of the Rights Holder from supporters, purchasers and licensees of Uploaded Works (<strong><em>Ungluers</em></strong>) using a third party payment processor selected in the sole discretion of the Distributor;</p>
<p style="text-indent: 36pt">(d) to retain, reserve and distribute payments to the Rights Holder and to the Distributor or otherwise pursuant to the terms of this Agreement, or to any agreement that the Distributor may have with a third party payment processor (including, but not limited to, a reasonable reserve against chargebacks or returns for a period of up to six months);</p>
<p style="text-indent: 36pt">(e) to convey licenses for the Uploaded Works to individuals pursuant to the terms set forth in the Terms of Use set forth on the Unglue.it website (as amended from time to time in the sole discretion of the Distributor);</p>
<p style="text-indent: 36pt">(f) to convey licenses for the Uploaded Works to libraries and similar non-profit institutions based on the terms set forth in the then current version of the Unglue.it Library License Agreement, a copy of which shall be provided to the Rights Holder upon request; and</p>
<p style="text-indent: 36pt">(g) to insert the corresponding license notices into the Uploaded Works that reflect the then current Ungluing Date and other applicable license terms.</p>
<p><strong style="text-indent: 0pt">6. Service Fees.</strong> As full compensation for the services provided by the Distributor in connection with the Programs, the Rights Holder shall pay to the Distributor, and hereby authorizes the Distributor to withhold from revenues collected by the Distributor on behalf of the Rights Holder the fees set forth in the applicable Program Terms.</p>
<p style="text-indent: 0pt"><strong>7. Payments to Rights Holder.</strong></p>
<p>(a) In no event shall payment be made until the Rights Holder has delivered to the Distributor a digital file for the applicable Uploaded Work that complies with the delivery specifications set forth on the then-current Unglue.it website terms of use.</p>
<p>(b) The Distributor shall pay the Rights Holder the proceeds due and owing pursuant to the applicable Program Terms no less than quarterly (or more frequently at the discretion of the Distributor) in arrears, payable on the fifteenth day of the month following the close of each calendar quarter, such payment to cover the previous calendar quarter. For example, payments due in connection with transactions that occur January 1 through March 31 will be paid to the Rights Holder on April 15 of the same year. Each payment shall be accompanied by a statement detailing sales and licensing data, revenues received, return data, reserve and Distribution Fees withheld. Notwithstanding the above, quarterly payments may be deferred until the following pay period in the event that the amount payable to the Rights Holder for any given pay period is less than $100.</p>
<p><strong>8. Rights Holder Warrantees and Representations.</strong> The Rights Holder warrants and represents as follows:</p>
<p style="text-indent: 36pt">(a) The Rights Holder is the sole owner of the copyright in the each Uploaded Work, or has the full power and authority to enter into this Agreement on behalf of the copyright owners of each Uploaded Work.</p>
<p style="text-indent: 36pt">(b) The signer of this Agreement has full authority to enter into this Agreement on behalf of this Rights Holder and to bind the Rights Holder by their signature.</p>
<p style="text-indent: 36pt">(c) The Rights Holder has all rights necessary to grant the rights granted to the Distributor pursuant to this Agreement, including but not limited to the right to display, market, copy, distribute and transmit the Uploaded Works on the Unglue.it website, the right to license the Uploaded Works to third party individuals, libraries and institutions as contemplated under this Agreement, and to release digital copies of the Uploaded Works under a Creative Commons license upon the successful completion of a campaign.</p>
<p style="text-indent: 36pt">(d) Neither the Rights Holder nor the copyright owner has entered any agreements with any third party that impact the ability of the Rights Holder to enter into this Agreement or to comply with its obligations hereunder, including but not limited to the obligation to release the Uploaded Work under a CC License on the Ungluing Date.</p>
<p style="text-indent: 36pt">(e) The Rights Holder assumes sole responsibility for the payment of any royalties or other fees that may be due to third parties in connection with revenues collected by the Distributor in connection with the Uploaded Work.</p>
<p style="text-indent: 36pt">(f) Each Uploaded Work is original to the copyright owner or the credited author and does not infringe on any statutory or common law copyright or any proprietary right of any third party.</p>
<p style="text-indent: 36pt">(g) Each Uploaded Work does not invade the privacy of any third party, or contain matter libelous or otherwise in contravention of the rights of any third person.</p>
<p style="text-indent: 36pt">(h) Each Uploaded Work contains no matter the publication or distribution of which would otherwise violate any federal or state statute or regulation, nor is the Uploaded Work in any manner unlawful, and nothing in the Uploaded Work shall be injurious to the health of a reader of the Uploaded Work.</p>
<p style="text-indent: 36pt">(i) There is no threatened or pending litigation or third party claim that relates to any Uploaded Work.</p>
<p style="text-indent: 36pt">(j) The Rights Holder shall comply with the terms set forth in the then current Terms of Use set forth on the Unglue.it website pertaining to the content that may be posted on the Unglue.it site in connection with any campaign.</p>
<p style="text-indent: 36pt">(k) The Rights Holder shall timely pay any sales taxes, withholding or other taxes relating to revenues processed by the Distributor on behalf of the Rights Holder.</p>
<p style="text-indent: 36pt">(l) The Rights Holder agrees that any data obtained from Unglue.it or the distributor must always be handled in accordance with the Unglue.it Terms of Service and Privacy Notice.</p>
<p style="text-indent: 0pt"><strong>9. Reliance of the Distributor on the Rights Holder Representations and Warrantees.</strong> Each of the representations and warrantees of the Rights Holder set forth in this Agreement is true as of the date of this Agreement and shall remain true during the Term. The Distributor may rely on the truth of such representations and warrantees in dealing with any third party including but not limited to Ungluers and licensees. The Distributor is under no obligation to make an independent investigation to determine whether the above representations are true and accurate. Upon the Distributors request, the Rights Holder shall provide the Distributor with copies of any and all prior publishing agreements and rights agreements, assignments, releases and consents relating to any Uploaded Work submitted to the Distributor in connection with a Program. The Distributor may, in its sole discretion, decline to accept any Uploaded Work as part of any Program, for any reason or for no reason.</p>
<p style="text-indent: 0pt"><strong>10. Indemnification.</strong> The Rights Holder shall indemnify and hold harmless the Distributor, its officers, directors, employees, agents, licensees and assigns (<strong><em>Indemnified Parties</em></strong>) from any losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) that may arise out of any claim by the Distributor or any third party relating to the alleged breach of any of the Rights Holders warrantees and representation as set forth in this Agreement.</p>
<p style="text-indent: 0pt"><strong>11. Limitation of Liability. </strong>Under no circumstances, including, without limitation, negligence, shall the Distributor or its directors, affiliates, officers, employees, or agents be responsible for any indirect, incidental, special, or consequential damages arising from or in connection with the use of or the inability to use the Program or the web interface, or any content contained on the Unglue.it website, including, without limitation, damages for loss of profits, use, data, or other intangibles.</p>
<p style="text-indent: 0pt"><strong>12. No Joint Venture.</strong> This Agreement shall not be deemed to have created an agency relationship, partnership or joint venture between the parties.</p>
<p style="text-indent: 0pt"><strong>13. Entire Understanding.</strong> This Agreement, together with the Terms of Service contained on the Distributors website as updated by the Distributor from time to time without notice to the Rights Holder, and any applicable CC licenses, constitute the entire agreement between the parties and supersedes any previous agreements and understandings had between the parties with respect to the Uploaded Works.</p>
<p style="text-indent: 0pt"><strong>14. Governing Law; Venue.</strong> This Agreement is governed by and shall be interpreted and construed according to the laws of the United States with respect to copyright law and the laws of New York with regard to all other matters. At the Distributors option, any claim arising out of or related to this Agreement shall be settled by arbitration administered by a neutral arbitrator selected by the parties. If the Distributor elects to use the court system as its preferred mode of dispute resolution, then the dispute shall be subject to the exclusive jurisdiction of New York State. Prior to the commencement of any arbitration or litigation proceeding, the Distributor may elect to require that the parties participate in good faith effort to resolve the dispute through mediation. The venue for all dispute resolution proceedings shall be the city and state of New York.</p>
<p style="text-indent: 0pt"><strong>15. Execution.</strong> This Agreement may be executed by exchange of emails. Electronic signatures, faxed or scanned signatures shall be as binding as an original signature.</p>
<p><strong>AGREED AND ACCEPTED:</strong></p>
<p style="text-align: justify;">For <strong>FREE EBOOK FOUNDATION, INC. </strong>, Distributor</p>
<p style="text-align: justify;">Eric Hellman, President<strong> </strong></p>
<br/>
{{ form.rh_name.errors }}
<p style="text-align: justify;">For <strong><span id="rh_name">[Rights Holder]</span></strong>, Rights Holder </p>
{{ form.signature.errors }}
<p style="text-align: justify;"><em><strong></strong>Signature: {{ form.signature }}</em>, <span id="rh_signer_title">[Title]</span></p>
<p style="text-align: justify;"><em>(Type your name to enter your electronic signature.)</p>
<input type='submit' name='submit' value='Enter Signature' />
</form>
</div>
</div>
{% else %}
Please <a href="{% url 'superlogin' %}?next={{ request.get_full_path|urlencode }}">log in or create an account</a> to use the rights holder agreement.
{% endif %}
{% endblock %}

View File

@ -1,6 +1,6 @@
{% extends 'basedocumentation.html' %}
{% block title %}Tools for Rightsholders {% endblock %}
{% block title %} for Rightsholders {% endblock %}
{% block extra_extra_head %}
{{ block.super }}
<link rel="stylesheet" href="/static/css/ui-lightness/jquery-ui-1.8.16.custom.css" type="text/css" media="screen">
@ -15,7 +15,7 @@
{% block doccontent %}
<h1>unglue.it Tools for Rightsholders</h1>
<h1>Unglue.it for Rightsholders</h1>
<div class="presstoc"><div class="pressemail">
Any questions not covered here? Please email us at <a href="mailto:rights@gluejar.com">rights@gluejar.com</a>.
@ -38,7 +38,7 @@ Any questions not covered here? Please email us at <a href="mailto:rights@gluej
</ul>
<h2 id="getting_started">Getting Started</h2>
<p>
If you're an author, publisher, or other rights holder, you can participate more fully in Unglue.it by registering as a rights holder. Registered rights holders can:
If you're an author, publisher, or other rights holder, you can participate more fully in Unglue.it by registering as a rights holder. Participating rights holders can:
<ul class="bullets">
<li> Add books to the unglue.it database.</li>
<li> Set metadata and descriptions for their books.</li>
@ -116,7 +116,6 @@ If you're an author, publisher, or other rights holder, you can participate more
<form method="POST" action="#managed_campaigns">
{% csrf_token %}
{{ claim.campaign_form.name }}{{ claim.campaign_form.name.errors }}
{% if claim.rights_holder.can_sell %}
{% ifequal claim.can_open_new 1 %}
<p>Choose the Campaign Type: {{ claim.campaign_form.type }}{{ claim.campaign_form.type.errors }}</p>
<ol>
@ -128,9 +127,6 @@ If you're an author, publisher, or other rights holder, you can participate more
Your previous campaign succeeded, but you can open a new <i>Thanks-For-Ungluing</i> campaign. <input type="hidden" id="cl_{{ claim.id }}-type" name="cl_{{ claim.id }}-type" value="3" />
{{ claim.campaign_form.type.errors }}
{% endifequal %}
{% else %}
<input type="hidden" id="cl_{{ claim.id }}-type" name="cl_{{ claim.id }}-type" value="1" />
{% endif %}
<p>Add another Campaign Manager(s) by their Unglue.it username: </p>
<div style="width:220px; padding-left:20px" >{{ claim.campaign_form.managers }}{{ claim.campaign_form.managers.errors }}
<br />
@ -213,9 +209,9 @@ If you're an author, publisher, or other rights holder, you can participate more
{% else %}
<h2 id="your_rhs">Your Books/Campaigns</h2>
<I>If you were a registered rights holder with Unglue.it, you'd be able to see and manage your campaigns here. </I>
<I>If you were a registered rights holder with Unglue.it, you'd be able to see and manage your books and campaigns here. </I>
{% endif %}
<h2 id="how_to">Registering Your Rights</h2>
<h2 id="how_to">Becoming an Unglue.it Rights Holder</h2>
<ol>
{% if not request.user.is_authenticated %}
@ -223,7 +219,7 @@ If you're an author, publisher, or other rights holder, you can participate more
{% else %}
<li class="checked">You've already set up an Unglue.it account.</li>
{% endif %}
{% if not request.user.rights_holder.count %}<li>{% else %}<li class="checked">{% endif %}Sign a <a href="https://www.docracy.com/1mud3ve9w8/unglue-it-non-exclusive-platform-services-agreement">Platform Services Agreement</a>. Unglue.it uses Docracy.com to manage rights holder agreements. If you have any questions, <a href="mailto:rights@gluejar.com?subject=agreement">ask us</a>.</li>
{% if not request.user.rights_holder.count %}<li>{% else %}<li class="checked">{% endif %}Sign a <a href="{% url 'agree' %}">Unglue.it Rights Holder Agreement</a>. If you have any questions, <a href="mailto:info@ebookfoundation.org?subject=agreement">ask us</a>.</li>
{% if claims %}
<li class="checked"><i>You have claimed {{ claims.count }}</i> work(s). You can claim more.
{% else %}

View File

@ -5,11 +5,9 @@ from django.contrib.auth.decorators import login_required
from django.contrib.sites.models import Site
from django.views.generic import ListView, DetailView
from django.views.generic.base import TemplateView
#from django.views.generic.simple import direct_to_template
from django.views.decorators.csrf import csrf_exempt
from regluit.core.feeds import SupporterWishlistFeed
from regluit.core.models import Campaign
from regluit.frontend import views
@ -25,6 +23,8 @@ urlpatterns = [
url(r"^privacy/$", TemplateView.as_view(template_name="privacy.html"), name="privacy"),
url(r"^terms/$", TemplateView.as_view(template_name="terms.html"), name="terms"),
url(r"^rightsholders/$", views.rh_tools, name="rightsholders"),
url(r"^rightsholders/agree/$", views.RHAgree.as_view(), name="agree"),
url(r"^rightsholders/agree/submitted$", TemplateView.as_view(template_name='agreed.html'), name="agreed"),
url(r"^rightsholders/campaign/(?P<id>\d+)/$", views.manage_campaign, name="manage_campaign"),
url(r"^rightsholders/campaign/(?P<id>\d+)/results/$", views.manage_campaign, {'action': 'results'}, name="campaign_results"),
url(r"^rightsholders/campaign/(?P<id>\d+)/(?P<ebf>\d+)/makemobi/$", views.manage_campaign, {'action': 'makemobi'}, name="makemobi"),

View File

@ -47,7 +47,7 @@ from django.utils.http import urlencode
from django.utils.translation import ugettext_lazy as _
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST
from django.views.generic.edit import FormView
from django.views.generic.edit import FormView, CreateView
from django.views.generic.list import ListView
from django.views.generic.base import (
TemplateView,
@ -1776,7 +1776,7 @@ def rh_tools(request):
claim.campaign_form.save_m2m()
claim.campaign_form = None
else:
c_type = 2 if claim.rights_holder.can_sell else 1
c_type = 2
claim.campaign_form = OpenCampaignForm(
initial={'work': claim.work, 'name': claim.work.title, 'userid': request.user.id, 'managers': [request.user.id], 'type': c_type},
prefix = 'cl_'+str(claim.id),
@ -1802,6 +1802,20 @@ def rh_tools(request):
campaign.clone_form = CloneCampaignForm(initial={'campaign_id':campaign.id}, prefix='c%s' % campaign.id)
return render(request, "rh_tools.html", {'claims': claims , 'campaigns': campaigns})
class RHAgree(CreateView):
template_name = "rh_agree.html"
form_class = RightsHolderForm
success_url = reverse_lazy('agreed')
def get_initial(self):
return {'owner':self.request.user.id, 'signature':''}
def form_valid(self, form):
form.instance.signer_ip = self.request.META['REMOTE_ADDR']
return super(RHAgree, self).form_valid(form)
#self.form.instance.save()
#return response
def rh_admin(request, facet='top'):
if not request.user.is_authenticated() :
return render(request, "admins_only.html")
@ -1812,9 +1826,10 @@ def rh_admin(request, facet='top'):
active_data = models.Claim.objects.filter(status = 'active')
if request.method == 'POST':
if 'create_rights_holder' in request.POST.keys():
form = RightsHolderForm(data=request.POST)
form = RightsHolderApprovalForm(data=request.POST)
pending_formset = PendingFormSet (queryset=pending_data)
if form.is_valid():
form.instance.approved = True
form.save()
form = RightsHolderForm()
if 'set_claim_status' in request.POST.keys():

File diff suppressed because one or more lines are too long

View File

@ -856,9 +856,9 @@ a.nounderline {
}
li.checked {
list-style-type:none;
list-style-type:decimal;
background:transparent url(/static/images/checkmark_small.png) no-repeat 0 0;
margin-left: -20px;
margin-left: 0px;
padding-left: 20px;
}