Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F212052
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
37 KB
Subscribers
None
View Options
diff --git a/img/index.html b/img/index.html
new file mode 100644
--- /dev/null
+++ b/img/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+ "http://www.w3.org/TR/html4/strict.dtd"
+ >
+<html lang="en">
+<head>
+ <title>Restricted directory</title>
+ <link rel="Stylesheet" href="../css/zed/theme.css" type="text/css" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+</head>
+<body>
+ <div style="width: 960px; margin: auto; margin-top: 3em;">
+ <h1 style="font-size: 3em;">Zed</h1>
+ <h2>img directory</h2>
+ <p>As you can guess from the URL, this directory contains <em>image files <em>.</p>
+ </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/img/login/invite.png b/img/login/invite.png
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..18d3dbd6a28d25516652bfe9176ae16d155dbc2a
GIT binary patch
literal 22968
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
N002ovPDHLkV1mefn|S~L
diff --git a/includes/objects/invite.php b/includes/objects/invite.php
new file mode 100644
--- /dev/null
+++ b/includes/objects/invite.php
@@ -0,0 +1,169 @@
+<?php
+
+/*
+ * User invite class
+ *
+ * 0.1 2010-06-29 02:13 Created by hand
+ *
+ * @package Zed
+ * @copyright Copyright (c) 2010, Dereckson
+ * @license Released under BSD license
+ * @version 0.1
+ *
+ */
+class Invite {
+
+ public $code;
+ public $date;
+ public $from_user_id;
+ public $from_perso_id;
+
+ /*
+ * @var int the user_id who have been claimed the invite
+ * Will be NULL as long as the invite haven't been claimed
+ */
+ public $to_user_id = NULL;
+
+ /*
+ * Initializes a new instance
+ * @param int $code the primary key
+ */
+ function __construct ($code = NULL) {
+ if ($code) {
+ $this->code = $code;
+ $this->load_from_database();
+ } else {
+ //New invite code
+ $this->generate_code();
+ $this->date = time();
+ }
+ }
+
+ //Generates a unique invite code
+ function generate_code () {
+ global $db;
+
+ do {
+ $this->code = genereString("AAA111");
+ $sql = "SELECT COUNT(*) FROM " . TABLE_USERS_INVITES . " WHERE invite_code = '$this->code' LOCK IN SHARE MODE;";
+ if (!$result = $db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Can't access invite users table", '', __LINE__, __FILE__, $sql);
+ }
+ $row = $db->sql_fetchrow($result);
+ } while ($row[0]);
+ }
+
+ /*
+ * Loads the object Invite (ie fill the properties) from the database
+ */
+ function load_from_database () {
+ global $db;
+ $code = $db->sql_escape($this->code);
+ $sql = "SELECT * FROM " . TABLE_USERS_INVITES . " WHERE invite_code = '" . $code . "'";
+ if ( !($result = $db->sql_query($sql)) ) message_die(SQL_ERROR, "Unable to query invite codes", '', __LINE__, __FILE__, $sql);
+ if (!$row = $db->sql_fetchrow($result)) {
+ $this->lastError = "Invite code unkwown: " . $this->code;
+ return false;
+ }
+ $this->code = $row['invite_code'];
+ $this->date = $row['invite_date'];
+ $this->from_user_id = $row['invite_from_user_id'];
+ $this->from_perso_id = $row['invite_from_perso_id'];
+ $this->to_user_id = $row['invite_to_user_id'];
+
+ return true;
+ }
+
+ /*
+ * Determines wheter the current invite code have been claimed by an user.
+ * @return true if the code have been claimed ; otherwise, false.
+ */
+ function is_claimed () {
+ return (bool)$this->to_user_id;
+ }
+
+ /*
+ * Saves to database
+ */
+ function save_to_database () {
+ global $db;
+
+ $code = $db->sql_escape($this->code);
+ $date = $db->sql_escape($this->date);
+ $from_user_id = $db->sql_escape($this->from_user_id);
+ $from_perso_id = $db->sql_escape($this->from_perso_id);
+ $to_user_id = $this->to_user_id ? "'" . $db->sql_escape($this->to_user_id) . "'" : 'NULL';
+
+ //Updates or inserts
+ $sql = "REPLACE INTO " . TABLE_USERS_INVITES . " (`invite_code`, `invite_date`, `invite_from_user_id`, `invite_from_perso_id`, `invite_to_user_id`) VALUES ('$code', '$date', '$from_perso_id', '$from_user_id', $to_user_id)";
+ if (!$db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Unable to save invite code", '', __LINE__, __FILE__, $sql);
+ }
+ }
+
+ /*
+ * Deletes the invite
+ */
+ function delete () {
+ global $db;
+ $code = $db->sql_escape($this->code);
+ $sql = "DELETE FROM " . TABLE_USERS_INVITES . " WHERE invite_code = '$code'";
+ if (!$db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Unable to save delete code", '', __LINE__, __FILE__, $sql);
+ }
+ }
+
+ /*
+ * Creates an invite code
+ * @param int $user_id user id
+ * @param int $perso_id perso id
+ * @return string the invite code
+ */
+ static function create ($user_id, $perso_id) {
+ $invite = new Invite();
+ $invite->from_perso_id = $perso_id;
+ $invite->from_user_id = $user_id;
+ $invite->save_to_database();
+ return $invite->code;
+ }
+
+ /*
+ * Gets invites generated by the specified perso ID
+ *
+ * @param int $perso_id the perso whom to get the invites
+ * @return Array an array of string, each line being an invite code
+ */
+ static function get_invites_from ($perso_id) {
+ global $db;
+ $sql = "SELECT invite_code FROM " . TABLE_USERS_INVITES
+ . " WHERE invite_from_perso_id = $perso_id AND invite_to_user_id IS NULL ORDER BY invite_date ASC";
+ if (!$result = $db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Can't access invite users table", '', __LINE__, __FILE__, $sql);
+ }
+ while ($row = $db->sql_fetchrow($result)) {
+ $codes[] = $row['invite_code'];
+ }
+ return $codes;
+ }
+
+ static function who_invited ($perso_id) {
+ global $db;
+ $perso = Perso::get($perso_id);
+
+ if ($user_id = $perso->user_id) {
+ $sql = "SELECT invite_from_perso_id FROM " . TABLE_USERS_INVITES . " WHERE invite_to_user_id = '$user_id'";
+ if (!$result = $db->sql_query($sql)) {
+ message_die(SQL_ERROR, "Can't access invite users table", '', __LINE__, __FILE__, $sql);
+ }
+ if ($row = $db->sql_fetchrow($result)) {
+ return $row[0];
+ }
+ }
+
+ return null;
+ }
+
+}
+
+?>
+
diff --git a/skins/zed/account_create.tpl b/skins/zed/account_create.tpl
new file mode 100644
--- /dev/null
+++ b/skins/zed/account_create.tpl
@@ -0,0 +1,51 @@
+{include file="perso_header.tpl"}
+
+<div class="grid_16">
+ <img src="{#StaticContentURL#}/img/login/invite.png" title="{#CreateAccountImageTitle#}" alt="{#CreateAccountImageAlt#}" align="right" />
+ <h2>{#CreateAccountTitle#}</h2>
+ <p><em>{#CreateAccountIntro#}</em></p>
+ <!-- Edit Perso form -->
+ <form dojoType="dijit.form.Form" id="AccountForm" method="post" execute="document.getElementById('AccountForm').submit()">
+ <input type="hidden" name="form" value="account.create" />
+ <div class="row">
+ <label class="firstLabel" for="username">{#YourLogin#}</label>
+ <input type="text" id="username" name="username" maxlength="11"
+ value="{$username}" dojoType="dijit.form.ValidationTextBox"
+ required="true" trim="true" lowercase="true" class="medium"
+ promptMessage="{#EnterUsernamePromptMessage#}"
+ />
+ </div>
+ <div class="row">
+ <label class="firstLabel" for="invite_code">{#InviteCode#}</label>
+ <input type="text" id="invite_code" name="invite_code" maxlength="6"
+ value="{$invite_code}" class="small"
+ dojoType="dijit.form.ValidationTextBox" uppercase="true"
+ regExp="{literal}[a-zA-Z]{3}[0-9]{3}{/literal}"
+ promptMessage="{#EnterInviteCodePromptMessage#}"
+ invalidMessage="{#IncorrectInviteCode#}"
+ />
+ </div>
+ <div class="row">
+ <label class="firstLabel" for="email">{#YourEmail#}</label>
+ <input type="text" id="email" name="email" maxlength="63"
+ value="{$email}" class="long" required="true" trim="true"
+ regExpGen="dojox.validate.regexp.emailAddress"
+ dojoType="dijit.form.ValidationTextBox"
+ promptMessage="{#EnterEmailPromptMessage#}"
+ />
+ </div>
+ <div class="row" dojoType="dojox.form.PasswordValidator" name="passwd">
+ <label class="firstLabel">{#Password#}</label>
+ <input type="password" pwType="new" />
+ <br />
+ <label class="firstLabel">{#Password#}</label>
+ <input type="password" pwType="verify" />
+ </div>
+ <div class="row">
+ <button dojoType="dijit.form.Button" type="submit" value="Save"
+ iconClass="dijitEditorIcon dijitEditorIconSave"
+ />{#Save#}</button>
+ </div>
+ </form>
+</div>
+{include file="perso_footer.tpl"}
\ No newline at end of file
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Nov 25, 04:28 (4 h, 18 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
20838
Default Alt Text
(37 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment