Coder Social home page Coder Social logo

pleft's Introduction

Pleft

This is the Pleft software that ran on pleft.com (not owned anymore). See Pleft’s future for a discussion on further public hosting of Pleft.

Screenshots

Home Appointment

Installation

  1. Check out the source code (git clone git://github.com/sander/pleft.git).
  2. Enter into the newly created pleft/ directory (cd pleft/).
  3. Decide which directory to put Pleft's environment in (export PLENV=~/env/pleft).
  4. Create a Pleft environment (python tools/pleft-bootstrap.py $PLENV).
  5. Create a file pleft/local_settings.py, based on one of the examples in that directory. If you just want to test Pleft, copy pleft/local_settings.py.debug to pleft/local_settings.py to do that. You need to edit the file to modify some paths. Especially database information (i.e. DATABASE_NAME) and SECRET_KEY need to be changed. The SQLite database will be created automatically.
  6. Activate the Pleft environment (source $PLENV/bin/activate).
  7. Create the proper tables in the database (python pleft/manage.py syncdb).

Running

Activate the Pleft environment:

source $PLENV/bin/activate

Run the Pleft debug server:

python pleft/manage.py runserver

In debug mode, emails are written to the console instead of being sent. If you need a link that was provided this way, note that characters like the = are escaped. So you might for example need to replace =3D with =.

Translations

If you want to test or deploy translations, install gettext and run:

python pleft/manage.py mo

Deployment

See Deploying Django.

If you are using MySQL, you need to make sure that the database is created using:

CREATE DATABASE name CHARACTER SET utf8

Also, for the user system to work, the email address field must be made case sensitive, using:

ALTER TABLE plauth_user MODIFY email VARCHAR(255) COLLATE utf8_bin

Publishing changes

Create commits for your changes. See Making changes for help.

There are two ways to publish changes to the code:

  • Create a fork of the repository and push your changes to it. See Fork A Repo. This makes it easy to review your code.
  • Create a patch file using the command git format-patch origin/master --stdout > filename.patch.

Contact

Feel free to contact our public mailing list at [email protected] if you are stuck.

pleft's People

Contributors

sander avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

pleft's Issues

bug in tools\pleft-bootstrap.py (?)

Hi Sander,

I was trying to install pleft on Win7x64. I have Python 2.7 from ActiveState installed and configured and also the PLENV variable. Upon issuing python p:\pleft\tools\pleft-bootstrap.py %PLENV% I get:

Traceback (most recent call last):
  File "tools\pleft-bootstrap.py", line 1512, in <module>
    main()
  File "tools\pleft-bootstrap.py", line 540, in main
    after_install(options, home_dir)
  File "tools\pleft-bootstrap.py", line 1144, in after_install
    subprocess.call([join(home_dir, 'bin', 'pip'), 'install', '--requirement=tools/requirements.txt'])
  File "P:\python27\lib\subprocess.py", line 486, in call
    return Popen(*popenargs, **kwargs).wait()
  File "P:\python27\lib\subprocess.py", line 672, in __init__
    errread, errwrite)
  File "P:\python27\lib\subprocess.py", line 882, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

Looking into p:\pleft\tools\pleft-bootstrap.py#L1143, the path is actually different than the one created in PLENV. There is no bin directory and pip.exe is actually in Scripts. So I changed 'bin' to 'Scripts' to read:

    subprocess.call([join(home_dir, 'Scripts', 'pip'),
                     'install', '--requirement=tools/requirements.txt'])

And re-executing python p:\pleft\tools\pleft-bootstrap.py %PLENV% it starts to download and install the 4 required packages but fails at MySQL-python-1.2.3:

Downloading/unpacking Django>=1.3 (from -r tools/requirements.txt (line 1))
  Downloading Django-1.3.1.tar.gz (6.5Mb): 6.5Mb downloaded
  Running setup.py egg_info for package Django

Downloading/unpacking gunicorn>=0.13.4 (from -r tools/requirements.txt (line 2))
  Downloading gunicorn-0.13.4.tar.gz (283Kb): 283Kb downloaded
  Running setup.py egg_info for package gunicorn

    warning: no files found matching '*' under directory 'debian'
Downloading/unpacking MySQL-python>=1.2.3 (from -r tools/requirements.txt (line 3))
  Downloading MySQL-python-1.2.3.tar.gz (70Kb): 70Kb downloaded
  Running setup.py egg_info for package MySQL-python
    Traceback (most recent call last):
      File "<string>", line 14, in <module>
      File "z:\env\pleft\build\MySQL-python\setup.py", line 15, in <module>
        metadata, options = get_config()
      File "setup_windows.py", line 7, in get_config
        serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options['registry_key'])
    WindowsError: [Error 2] The system cannot find the file specified
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 14, in <module>

  File "z:\env\pleft\build\MySQL-python\setup.py", line 15, in <module>

    metadata, options = get_config()

  File "setup_windows.py", line 7, in get_config

    serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options['registry_key'])

WindowsError: [Error 2] The system cannot find the file specified

----------------------------------------
Command python setup.py egg_info failed with error code 1
Storing complete log in F:\Users\Bogdan\AppData\Roaming\pip\pip.log

I see that it tries to open the registry key HKLM\SOFTWARE\MySQL AB\MySQL Server 5.0 which does not exist because I have MySQL 5.5 installed (it's also installed from a zip package, and not the .exe installer). I then tried to install mysql-python in my core python 2.7 distribution using pypm to see if it fails in the same way and it did not, it installed just fine:

F:\ProgramData>pypm install mysql-python
The following packages will be installed into "%APPDATA%\Python" (2.7):
 mysql-python-1.2.3
Get: [pypm-free.activestate.com] mysql-python 1.2.3
Installing mysql-python-1.2.3

Any tips? I could install the ancient MySQL 5.0 but if you can think of a way to make it work without that then I think that will be better.

Cheers

Add developer button @ Homepage

Reported by project member kleiskrebbers, Nov 18, 2011
Add developer button @ Homepage to attract developers for Pleft.com

Open meetings

(This is a feature request)

It would be convenient to be able arrange "Open meetings" that do not require listing every participant's email, but are open to anyone who visits a unique meeting link, or similar.

We at Debian Games Team have been interested in using Pleft as an open-source alternative to doodle for our meetings, but this is unfortunately one of the major showstopper in that regard, since our workflow is to a) send a custom announcement to our mailing list, instead of private email, and b) hold open meetings that anyone are allowed to participate in and vote for time on (since the Team is so loosely defined anyways, and we have "visitors" from other distributions, etc).

Send update emails about running appointments

It would be nice to give users the option to receive daily updates about running appointments. They could contain information like who has entered their availability, and what new dates were proposed.

I'm not sure yet how to do this. These apps might be useful:

https://github.com/jtauber/django-mailer/
https://github.com/jtauber/django-notification/

Here's a home-grown solution to a comparable problem:

https://github.com/evgenyfadeev/CNPROG/blob/e560c528524f1c2ad4fbc8c73ee1482693e7b7de/forum/management/commands/send_email_alerts.py

vCal export support

For internal company use, a feature request is to support sending a final vCal invitation file to invitees.

http://en.wikipedia.org/wiki/VCal

A patch is being worked on. My advice to the author:

I think you'll need to create a new 'admin tool' in the appointment overview. There the initiator is instructed to select one of the dates in the table above. Pushing the button should send a POST request to a new view named plapp.views.send_vcal. That view can just output the vCal file using a Django template.

Correction: the person who wanted to write this patch decided to implement HTA export support instead.

Resend the sign in link

Currently the only way to access an old appointment overview, users need to go through their own email or activate a new appointment. This is not the most obvious way.

In the attachment is a proposal. It appears to people who are not signed in at the moment, and works like this:

  1. At the upper right, there is a dropdown button 'Sign in'.
  2. On click, a minimal popup opens where the user can enter his email address.
  3. When clicking 'Send link to sign in', a reminder email is sent. The popup's text changes to something like 'Please check your email.'

If the user has never used Pleft before, and also hasn't been invited, a new account should be created. This way it's impossible to abuse this feature to check whether specific people have used Pleft.

http://pleft.googlecode.com/issues/attachment?aid=-9070767568693286051&name=sign-in-mail.png&token=WZ4rUovRR_j1qV7wmUtyOdcYaX4%3A1324763349665&inline=1

Pleft prizes

Kleis: "Add the possibility to win virtual prizes.

Prizes like:

  • A lot of appointment awards.
  • Fastest reaction on an appointment.
  • etc...

This might motivate people to fill in the Pleft on time."

Allow for square brackets in the Invitees field

A list of invitees copied from Microsoft Outlook might contain [] brackets instead of <>. They should be considered the same in the code, and not cause an unspecified error like they currently do.

Allow for editing invitee's names after appointment creation

Because during creation it will not always be clear how invitees will appear to each other, the initiator should be given the option to edit their names from within the appointment overview. Probably the best way is to make the names editable inline within the table, but if that appears to be hard, an extra 'tool' can be added to the bottom, just like what we did with resending invitations.

Duplicate Invitee object

On March 8, I received two error emails about a duplicate Invitee object being found. It's likely about the same person. I'm not sure who it is yet, but investigation of the database should point that out.

Traceback (most recent call last):

File "/home/sander/tmp/dkp-db/django/core/handlers/base.py", line 100, in get_response
response = callback(request, _callback_args, *_callback_kwargs)

File "/home/sander/deploy/pleft/plapp/views.py", line 375, in set_availability
avail = models.Availability.objects.all().get(date=date, invitee=invitee)

File "/home/sander/tmp/dkp-db/django/db/models/query.py", line 343, in get
% (self.model._meta.object_name, num, kwargs))

MultipleObjectsReturned: get() returned more than one Availability -- it returned 2! Lookup parameters were {'date': <Date: Date object>, 'invitee': <Invitee: Invitee object>}

Change invation when resending

Resending an invitation means that you resend the initial invitation again. Since this sometimes can be a bit weird, it would be good if Pleft made it possible to change the invitation that you're resending to add a personal touch.

Feature request: local timezones

Reported by Ienorand, Jun 27, 2011

It would be very nice if it was possible to use local timezones for meetings with participants from several timezones.

(A doodle-does-it item).

comment Comment 1 by project member sander.dijkhuis, Jun 30, 2011
Thanks for your feature request. I think this will be especially useful for phone meetings.

I think we can implement this feature in two parts:

  1. Add a Time Zone field to the appointment creation form. The value can probably be automatically determined based on the computer time settings. The invitees will see a mention of the initiator's time zone at the top of the appointment overview.
  2. Add a time zone display setting for the invitees: at the overview they should be able to switch between Show Times In Initiator's Timezone and Show Times In My Timezone.

Let users merge their Pleft accounts

I've been invited to appointments on several email addresses, like variations on capitalization. This breaks my 'My appointments' menu. It would be nice if I could merge these Pleft accounts into one, so that I can reach all my appointments there. A place to do that is the /appointments page.

Ask users that are just signed in to verify their identity

Currently, when user John gets an appointment invitation forwarded by Jane and clicks the link, he is signed in as Jane without any notice. It might be a good idea to ask whether he really is Jane in a not-too-obtrusive way. This should reduce errors.

Personal overview reduced by new buttons

Reported by w.malten, Jan 27, 2011.

The bar in the personal overview indicating availability is now filled almost entirely by the three buttons and comment field.
This might reduce the user's perceived overview compared to previous versions.

Possible solution: colouring background colour of comment field by availability.

Delete dates and times

Not sure yet whether we really want this. It might be confusing invitees when options disappear, and entered availability data may be lost.

Maybe only make dates deletable when it hasn't been replied on yet?

A use case suggested by email was when accidentally the wrong dates are added. An undo button might work for this. (Suggestion: don't actually add the date for ~10 seconds, and display Undo during these.)

New use case suggested by email:

  1. The appointment is created with a lot of possible dates.
  2. Many of the dates appear not to be an option (probably due to important people not being available on those dates).
  3. The initiator wants to remove those dates, in order to keep an overview and more easily make a decision.

I think this should not be about removing dates, but about hiding them from the overview. If they are re-added by any user, they can be prefilled with the previously entered availability data.

Support signing in directly, without an email link

Not sure whether we want this yet. There are some attractive options however:

GITkit
http://code.google.com/apis/identitytoolkit/
pro: works directly with some email providers, no need for additional passwords
con: for other providers, there would be either password entry or no direct sign-in

BrowserID
https://browserid.org/
pro: possible future integration with Firefox, universal
con: requires tedious account creation through a third party like Mozilla

Make it easier to add one time for a lot of days

Use case: the user wants to propose 15:00 for each Monday to Friday during three weeks. Currently this requires at least 15 mouse clicks.

A proposed solution is to allow for selecting multiple days using CTRL or SHIFT and show one popup for them.

Delete past appointments

The initiator of an appointment should be able to delete the appointment permanently, not just archive it.

Allow to use Twitter instead of email

We see a lot of appointment planning happening through Twitter. It would be neat if you could sign in using your Twitter account, invite some followers and send the invitations through DM.

This might be interesting for posting updates about the availability form too.

Separate Title and description field

Kleis: "Appointment model should have separate title description fields. I see there are some games you are playing with ".", "!" and "\n" in the description."

Sander: "Another option that seems nicer to me, is making the automatic separation more visible. We used to have a <textarea>-like widget that would display the title-part in a different font than the description-part.

"I currently prefer returning to that approach (but with less bugs). It keeps the current database scheme intact, and seems to be more elegant. I can be convinced by user tests. :-)"

Allow the initiator to close the appointment

Kleis: "Initiator of appointment can select a single appointment time for a closed appointment; this automatically notifies all invitees."

Sander: "Here are some quick sketches that would be easily implementable. Currently I think we should combine B and C.

"We will need text for the mail that is sent to participants when the initiator decides on a date."

http://pleft.googlecode.com/issues/attachment?aid=-3808756789275200482&name=pick-date-sketches.jpg&token=LWRUxaP85vu0wBzBjYDJuAFOKO8%3A1324762867301&inline=1

Sander: "English and Dutch text by Kleis at:"
https://docs.google.com/document/pub?id=14IL_KIt8l4hyTmnazB4whoEARSoL1n1lXv8z9KUalc8

Work has started on the issue, but then the author unfortunately didn't have time to continue.

Make timeslots unavailable

Reported by project member kleiskrebbers, Jul 16, 2011
It would be nice that Pleft would make already chosen timeslots unavailable. So inivitees do not select the same time slot when they are adding data and times.

Delete Invitees from appointment

Reported by project member kleiskrebbers, Sep 19, 2011

If you fill in the wrong e-mailaddress of an invitee. It would be nice if it is possible to delete the invitee from the appointment overview.

Possibilty to add end-times

Reported by project member kleiskrebbers, Nov 9, 2011
The possibility to add end-times for an appointment.

Like: start at 11:00 ends at 15:00

Comment 1 by project member sander.dijkhuis, Nov 9, 2011
Do you have a specific use case?

Is the meeting length fixed, or does it also depend on the chosen time?

Comment 2 by handy.pascal, Nov 9, 2011
Hello, I requested this.
This is for my company and we want to organize our meetings with Pleft.

A Meeting can be from 11.11.2011 13:00 to 13.11.2011 15:00.
or just 11.11.2011. 11:00 to 11.11.2011 15:00

Everything should be possible.

I had the idea to make two fields unter the "add a time field" one with "days" -> numeric field and a field for the time.
so you can choose how long a meeting will last and set a time.

Comment 3 by project member sander.dijkhuis, Nov 9, 2011
Hey, thanks for your message. Just to make sure I understand it right: you want to organize meetings that may span either multiple days or a few hours?

It's an interesting feature, might be useful for planning vacations too.

I agree that your idea with additional 'how long will it take'-fields is probably easiest to fit in the current design.

Comment 4 by handy.pascal, Nov 9, 2011
yes you understand it right.
You're right this can be useful for more than just my problem.

I tried to implement it by myself, but I'm not good in python ;) so I just asked in facebook and now it's here.

Yes I thought about something like:

add a time
[15:00]

how long it will take
[3] days
[15:00] [submit]

is there a possibility that this feature would be finished soon?
Because I need this as fast as possible. My chef is waiting for it ;)

I don't know how much work it is and I would like to help as much as I can

Comment 5 by project member sander.dijkhuis, Nov 9, 2011
I will probably not have time to implement it myself this week. But in your Facebook comment you wrote that you have already started. If you have some code, I'd be glad to help you further during the next few days. Would that be fast enough for this appointment?

See the last section of http://code.google.com/p/pleft/wiki/GettingStarted for help publishing your code in a fork.

Have a Facebook-like widget for invitees

Reported by project member sander.dijkhuis, Jul 30, 2011
Something like http://loopj.com/jquery-tokeninput/

This would of course need some design to separate invitee's names from their email addresses, to enable the user to add a name to an email address, etc.

Comment 1 by project member sander.dijkhuis, Oct 10, 2011
See https://groups.google.com/d/msg/pleft/ULASR-YxA_Q/nit5nDL4kIIJ for a suggestion.

Comment 2 by project member sander.dijkhuis, Nov 27, 2011
Work started in this branch:

https://github.com/sander/pleft/tree/emailtokens

Comment 4 by project member sander.dijkhuis, Dec 8, 2011
Might be useful too: http://documentcloud.github.com/visualsearch/

Investigate replacing plauth by Django's auth system

The custom authentication system (plauth) was written as an alternative to the default one in Google App Engine. Django's system seems to be more flexible. We might be able to replace several plauth functions and plauth.models.User. This might make it easier to implement new functionality like BrowserID.

Unspecified problem in IE8

What I know: person X has invited person Y. When Y clicks the link, she cannot respond. 'My appointments' is blank. She uses Internet Explorer 8.0.

Pleft seems to work normally for me in IE8.

Hypotheses:

  1. She may have Google Chrome Frame installed. The sign in link is transformed into the default overview URL, without storing the cookie before Chrome Frame comes into action.
  2. She has cookies disabled. Or there is some other security setting.

I have not received further debug information, and don't know what to ask for. We might want to implement something like Google Feedback in order to collect all potentially relevant data in future cases.
http://www.google.com/tools/feedback/intl/en/index.html

French translation has the dates wrong

In plapp/locale/fr/LC_MESSAGES/django.po, the translation of msgid "D M d, G:i" accidentally is "D M s, G:i", causing dates to appear like "ven Oct 00, 12:00".

Thanks to Riccardo for noticing this.

Changing it back to "D M d, G:i" helps, as verified by Riccardo.

Use Chrome Frame when available, and ask to install it

If most Internet Explorer 6, 7 and 8 users would have Chrome Frame installed, we could use some nice HTML5 and CSS3 features.

I suggest we also try to prompt our IE users (23%) to install the plugin. It would look as ugly as in the attached screenshot, but may be worthwile and we can quickly remove it again.

http://www.google.com/chromeframe

http://pleft.googlecode.com/issues/attachment?aid=-2637588941607814838&name=chrome-frame-popup.png&token=UFx5eqsXYuRsbdCEfCqVd6MitlA%3A1324763348087&inline=1

Simple patch that does this.

http://code.google.com/p/pleft/issues/attachmentText?id=23&aid=-5438436004275980608&name=chrome-frame.patch&token=cuHFGFFgxp68fhnzxBLv9oGZWLE%3A1324763348088

First step done in hg revision 7c85323690: only the popup isn't shown yet.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.