elcodedocle / gplusraffle
基于Google API的抽奖网络应用
Requires
- php: >=5.3.0
- datatables/datatables: >=1.9.4
- drmonty/datatables-tabletools: >=2.1.5
- elcodedocle/uuid: >=1.0.0
- google/apiclient: 1.0.4-beta
- phstc/jquery-dateformat: >=1.0.0
- twbs/bootstrap: >=3.0.0
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-28 16:15:24 UTC
README
#####一个基于Google OAuth 2.0和FusionTables PHP API客户端的抽奖管理器
版权(C)2014 Gael Abadin
许可:MIT Expat
版本:0.1.4-beta
(De)Motivation
在网站上做一个“手动”抽奖可能要容易得多,但在线做则酷多了!(对我来说这样的技术宅来说)
(此外,我需要更好地了解最新的Google PHP客户端API:还有什么比做一个简单又酷的应用程序更好呢?;-)
这是一个概念验证应用程序,这意味着它工作得很好,但它缺乏其他任何东西,除了一个粗略的基本功能,尽管它应该很容易扩展。
无论如何,我从开发这个项目中学到的最主要的东西是,Fusion Tables根本不能替代甚至是最简单的数据库需求。这个项目完全可以被称作“关于Fusion Tables如何和为什么糟糕的研究”。
-
Fusion Tables不能替代SQL数据库(duh!),即使是在SELECT查询中的JOIN这样的基本、基本功能也是不允许的(你仍然可以在视图中合并两个表,然后查询该视图,这非常慢、效率低下且令人烦恼);即使是简单的UPDATE或DELETE查询也是一团糟,因为它们只能接受ROWID =作为WHERE子句条件...
-
Fusion Tables是一个实验性项目,这意味着它可能明天、后天或任何时间都会被取消。自6月份以来就是这样。
- Fusion Tables是一个实验性项目,这意味着它甚至不提供支付来增加你应用程序的API访问配额。一旦你的应用程序超过每天25000次请求(每次INSERT/UPDATE算作5次),你的应用程序将在第二天之前关闭。同样的论点适用于许多限制,如表大小、请求和上传文件大小等。
总之,Fusion Tables可能适合存储缓慢变化的地图数据等,但如果你想获得一些简单、强大且可扩展的云数据库服务,我建议你尝试AWS或Google Cloud SQL之类的服务,而不是使用Fusion Tables。我将是最后一个鼓励任何人在没有首先替换DAO以使用任何其他服务的情况下,至少尝试在Fusion Tables上使用此项目的人。如果我有朝一日发布超过修复此版本中发现的所有错误的更新,我打算这样做。
要求
- PHP >=5.3,启用了curl扩展
- (大多数推荐) Apache 2,启用了mod_rewrite以启用.htaccess URI重写,尽管你可以通过移植所需的重写规则使用任何其他Web服务器(并且webapp根本不依赖于它们)
- (强烈推荐) Linux服务器,启用了SSL(但不是heartbleed版本:P)
(所以,基本上,任何更新的默认LAMP堆栈,甚至没有M)
安装
这假设你已经创建了一个Google应用程序,所需的OAuth 2.0凭据,并在console.developers.google.com上激活了Fusion Tables API。如果你在这个过程中遇到问题,请查看这个教程。
使用composer
- 获取composer
curl -sS https://getcomposer.org/installer | php
- 从packagist仓库安装应用程序
php composer.phar create-project -s "beta" elcodedocle/gplusraffle
不使用composer
- 从您的Web服务器上的公开文件夹中下载并解压这个项目的最新版本(1.0.X)(例如,从git仓库下载最新版本)
wget https://github.com/elcodedocle/gplusraffle/archive/master.zip -O gplusraffle.zip unzip gplusraffle.zip -d /var/www
- 下载并解压最新版本(1.0.X)的google api php客户端到/gplusraffle/vendor/google,将目录重命名为apiclient等。
wget https://github.com/google/google-api-php-client/archive/master.zip -O apiclient.zip unzip apiclient.zip -d /var/www/gplusraffle/vendor/google mv /var/www/gplusraffle/vendor/google/google-api-php-client /var/www/gplusraffle/vendor/google/apiclient
- 下载并解压最新版本(2.2.1)的tabletools for datatables到/gplusraffle/vendor/google,将目录重命名为datatables-tabletools等。
wget https://github.com/drmonty/datatables-tabletools/archive/master.zip -O datatables-tabletools.zip unzip datatables-tabletools.zip -d /var/www/gplusraffle/components mv /var/www/gplusraffle/components/datatables-tabletools-master /var/www/gplusraffle/components/datatables-tabletools
- 下载并解压最新版本(1.0.0)的uuid类分发到/gplusraffle/vendor/elcodedocle,将目录重命名为uuid等。
wget https://github.com/elcodedocle/uuid/archive/master.zip -O uuid.zip unzip uuid.zip -d /var/www/gplusraffle/vendor mv /var/www/gplusraffle/vendor/uuid-master /var/www/gplusraffle/vendor/uuid
设置
-
编辑config.php.dist,将您的应用程序凭据填入所需字段,并保存为config.php。
-
将您的浏览器指向
/admin/login
(/main.php?collection=admin&action=login
),然后指向/admin/install
(/main.php?collection=admin&action=install
)。
这将设置应用程序将用于管理融合表的Google账户离线令牌。
您不需要使用创建开发人员控制台中应用程序的相同Google账户:如果您只想保留应用程序的表格,甚至可以创建一个新的Google账户。
存储在adminConfig.php
中的离线令牌将只允许应用程序离线访问该账户的融合表管理和基本配置信息(以检索账户ID)。
用户只需基本配置信息访问权限(用于用户ID)。
为了您的用户和您自己的安全,建议在服务器上使用SSL。由于我现在太懒且便宜,无法遵循我在设置演示站点时给出的建议,如果您担心有人可能会对您的账户的基本配置信息做出什么操作,强烈建议您不要在公开/非加密的连接上使用它。
如何使用
- 现在您可以
/admin/logout
(main.php?collection=admin&action=logout
)并转到/webapp
,作为普通用户登录并检查应用程序。
Web应用程序,/webapp
,提供了一个HTML5客户端接口,用于处理请求并展示用于管理和参与抽奖的JSON响应。
如果您想尝试API(也许甚至实现一个更酷的客户端),以下是可用的HTTP请求操作(所有响应都是JSON编码的,响应列名数组包含在响应字段的数据中的columns
字段,行数组包含在rows
字段)。
/admin/login
- 使用管理员作用域(融合表处理,基本配置信息访问)登录用户。
/admin/install
- 设置当前管理员Google账户ID和新的令牌以处理融合表操作。
/admin/uninstall
- 删除当前管理员Google账户ID和令牌(融合表将存储在账户中,但在重新安装时将创建新的)。
/, /user/login
- 登录用户(带有authUrl
链接的HTML输出),在成功打开Web会话(通过访问/webapp)后重定向到/webapp
。
/user/logout
- 登出用户(当会话过期时执行自动注销,在这种情况下,将发出401错误代码而不是请求的响应)。
/raffle/create/description
- 创建一个抽奖,返回其ID、描述、创建者(您)、创建日期(现在)、隐私(公开)和状态(关闭)。
/raffle/delete/raffleid
- 删除raffleid
(只有创建者可以执行此操作。警告:所有数据都将丢失,并且不需要确认!)。
/raffle/list
、/raffle/list/all
- 列出(公开)抽奖(ID、描述、创建者、状态和创建日期)。
/raffle/list/me
或 /raffle/list/user/joined/me
- 显示当前用户已参加的抽奖活动(管理员可以列出任何用户ID参加的抽奖活动)。
/raffle/list/mine
或 /raffle/list/user/created/me
- 显示当前用户创建的抽奖活动(管理员可以列出任何用户ID创建的抽奖活动)。
/raffle/list/raffle/raffleid
- 显示抽奖活动的参与者(以及如果已抽奖,则显示获奖者)。任何公开或私有的抽奖活动都可以列出,任何用户只要知道其ID即可加入或离开抽奖活动。只有创建者和管理员有管理权限。
/raffle/list/open
- 显示抽奖活动的详细信息(ID、描述、创建者、状态和创建日期)。
/raffle/list/closed
- 显示已关闭的抽奖活动。
/raffle/list/raffled
- 显示已抽奖的抽奖活动。
/raffle/open/raffleid
- 打开抽奖活动,以便用户可以加入。
/raffle/close/raffleid
- 关闭抽奖活动。不允许更多用户加入,除非重新打开。
/raffle/raffleid/limit
- 抽奖 raffleid
(只有创建抽奖活动的用户才能执行此操作,并且抽奖活动必须已关闭且参与者数量大于0。它会选择 min(参与者,限制)名获奖者,或者如果抽奖活动已经抽奖,则返回获奖者)。
/raffle/join/raffleid
- 用户加入 raffleid
(抽奖活动必须已打开)。
/raffle/leave/raffleid
- 用户离开 raffleid
(抽奖活动必须已打开)。
/raffle/check/raffleid
- 检查谁赢得了抽奖活动(抽奖活动必须已抽奖)。
关于数据库架构,它实际上是可能的 simplest。
-
抽奖列表存储在融合表 'raffles' 中(raffleid、描述、creatorid、created、隐私、状态)。
-
获奖者列表存储在融合表 'winners' 中(raffleid、userid、raffled)。
-
抽奖活动的参与者列表存储在融合表 'participants' 中(userid、raffleid、comment、joined)。
(所有日期都存储在 UTC,然后在 Web 应用客户端客户端重新格式化为本地时区)
如果你在开发,可以执行一些 phpunit 测试。
cd tests phpunit --testsuite gplusraffle
(如果你是开发者并且发现测试中未捕获的错误并想帮助我修复它,通过 pull request 打开一个失败的测试将很棒 :-))
待办事项
-
从融合表切换到更灵活且不太实验性的东西。
-
花一些时间制作一个漂亮的 GUI(或者至少一个我不感到尴尬的 GUI :-P)
-
v0.2 将实现私人抽奖,这些抽奖活动不会被非参与者列出,并且只能通过提供的链接访问。想参加这些抽奖的用户将加入请求表,创建者/管理员必须在它们被推入参与者表之前接受他们。
感谢
谷歌团队.
Twitter Bootstrap 团队(Bootstrap)。
DataTables 的开发者 Allan Jardine。
tabletools 的开发者 Mathias Rohnstock。
UUID 类的开发者 Andrew Moore。
spin.js 的开发者 Felix Gnass。
jquery-dateFormat 的开发者 Pablo Cantero。
享受!
(
如果你喜欢这个产品,请捐款!
比特币:13qZDBXVtUa3wBY99E7yQXBRGDMKpDmyxa
狗狗币:D8ZE9piiaj3aMZeToqyBmUMctDMfmErJCd
贝宝:[http://goo.gl/ql69W2](http://goo.gl/ql69W2)
)