Skip to content

Commit

Permalink
Added a social flagging feature
Browse files Browse the repository at this point in the history
  • Loading branch information
slifty committed May 10, 2011
1 parent af59ec4 commit abd69dc
Show file tree
Hide file tree
Showing 14 changed files with 589 additions and 12 deletions.
18 changes: 18 additions & 0 deletions api/flag_add.php
@@ -0,0 +1,18 @@
<?php
set_include_path("../");
include_once("head.php");

if(!User::isLoggedIn())
exit;

$clip = ClipFactory::getObject(isset($_POST['clipID'])?$_POST['clipID']:0);
if($clip->getClipID() == 0)
exit;

$flag = new Flag();
$flag->setUserID(User::$currentUser->getUserID());
$flag->setSourceID($clip->getSourceID());
$flag->setTime($clip->getStart() + (isset($_POST['time'])?$_POST['time']:0));
$flag->setType((isset($_POST['type'])?$_POST['type']:""));
$flag->save();
?>
2 changes: 2 additions & 0 deletions datarake.php
Expand Up @@ -15,6 +15,8 @@
$mysqli->query("delete from clips");
$mysqli->query("delete from users_interests");
$mysqli->query("delete from sources");
$mysqli->query("delete from contexts");
$mysqli->query("delete from flags");

$regionUSA = new Interest();
$regionUSA->setName("United States of America");
Expand Down
3 changes: 2 additions & 1 deletion head.php
@@ -1,7 +1,6 @@
<?php
// Setup the basics
session_start();
set_include_path("/");
require_once("conf.php");

// Load in the models
Expand All @@ -12,6 +11,8 @@
require_once("models/Interest.php");
require_once("models/User.php");
require_once("models/Source.php");
require_once("models/Context.php");
require_once("models/Flag.php");

// Log in
User::logout();
Expand Down
1 change: 1 addition & 0 deletions index.php
Expand Up @@ -17,6 +17,7 @@

<script src="scripts/jquery-1.5.2.min.js" type="text/javascript" charset="utf-8"></script>
<script src="scripts/jquery-ui-1.8.12.min.js" type="text/javascript" charset="utf-8"></script>
<script src="scripts/jquery.animate-shadow-min.js" type="text/javascript" charset="utf-8"></script>

<?php
$file = "pages/".$p."/".$a."/".$a.".js";
Expand Down
31 changes: 31 additions & 0 deletions install.php
Expand Up @@ -174,6 +174,37 @@
$mysqli->query("DELETE from appinfo") or print($mysqli->error);
$mysqli->query("INSERT into appinfo (version) values ('11');") or print($mysqli->error);

case 11:
echo("Creating context table\n");
$mysqli->query("CREATE table contexts (id int auto_increment primary key,
source_id int,
time int,
title int,
url varchar(255),
description text,
creation_date datetime)") or print($mysqli->error);
echo("Updating clips table\n");
$mysqli->query("ALTER table clips
change column start start int,
change column end end int") or print($mysqli->error);

echo("Updating app version\n");
$mysqli->query("DELETE from appinfo") or print($mysqli->error);
$mysqli->query("INSERT into appinfo (version) values ('12');") or print($mysqli->error);

case 12:
echo("Creating flags table\n");
$mysqli->query("CREATE table flags (id int auto_increment primary key,
source_id int,
user_id int,
time int,
type varchar(16),
creation_date datetime)") or print($mysqli->error);

echo("Updating app version\n");
$mysqli->query("DELETE from appinfo") or print($mysqli->error);
$mysqli->query("INSERT into appinfo (version) values ('13');") or print($mysqli->error);

default:
echo("Finished updating the schema\n");
}
Expand Down
35 changes: 27 additions & 8 deletions models/Clip.php
@@ -1,5 +1,6 @@
<?php
require_once("ClipFactory.php");
require_once("FlagFactory.php");
class Clip {

# Instance Variables
Expand All @@ -25,8 +26,8 @@ public function __construct() {
$this->clipOrder = 0;
$this->feedURL = "";
$this->contextURL = "";
$this->start = "";
$this->end = "";
$this->start = 0;
$this->end = 0;
$this->description = "";
$this->title = "";
$this->thumbnail = "";
Expand Down Expand Up @@ -65,8 +66,8 @@ public function save() {
clips.clip_order = ".$this->getClipOrder().",
clips.contextURL = '".DBConn::clean_for_mysql($this->getContextURL())."',
clips.feedURL = '".DBConn::clean_for_mysql($this->getFeedURL())."',
clips.start = '".DBConn::clean_for_mysql($this->getStart())."',
clips.end = '".DBConn::clean_for_mysql($this->getEnd())."',
clips.start = ".DBConn::clean_for_mysql($this->getStart()).",
clips.end = ".DBConn::clean_for_mysql($this->getEnd()).",
clips.description = '".DBConn::clean_for_mysql($this->getDescription())."',
clips.title = '".DBConn::clean_for_mysql($this->getTitle())."',
clips.thumbnail = '".DBConn::clean_for_mysql($this->getThumbnail())."'
Expand All @@ -85,8 +86,8 @@ public function save() {
".$this->getClipOrder().",
'".DBConn::clean_for_mysql($this->getContextURL())."',
'".DBConn::clean_for_mysql($this->getFeedURL())."',
'".DBConn::clean_for_mysql($this->getStart())."',
'".DBConn::clean_for_mysql($this->getEnd())."',
".DBConn::clean_for_mysql($this->getStart()).",
".DBConn::clean_for_mysql($this->getEnd()).",
'".DBConn::clean_for_mysql($this->getDescription())."',
'".DBConn::clean_for_mysql($this->getTitle())."',
'".DBConn::clean_for_mysql($this->getThumbnail())."')";
Expand Down Expand Up @@ -123,7 +124,25 @@ public function getDescription() { return $this->description; }
public function getTitle() { return $this->title; }

public function getThumbnail() { return $this->thumbnail; }

public function getFlags() {
$mysqli = DBConn::mysqli_connect();
$queryString = "select flags.id as flagID
from flags
where flags.source_id = ".$this->getSourceID()."
and flags.time >= ".$this->getStart()."
and flags.time <= ".$this->getEnd();

$result = $mysqli->query($queryString)
or print($mysqli->error);

$flagIDs = array();
while($resultArray = $result->fetch_assoc())
$flagIDs[] = $resultArray['flagID'];

return FlagFactory::getObjects($flagIDs);
}


# Setters
public function setEpisodeID($int) { $this->episodeID = $int;}
Expand All @@ -136,11 +155,11 @@ public function setFeedURL($str) { $this->feedURL = $str;}

public function setContextURL($str) { $this->contextURL = $str;}

public function setStart($str) { $this->start = $str;}
public function setStart($int) { $this->start = $int;}

public function setClipOrder($int) { $this->clipOrder = $int;}

public function setEnd($str) { $this->end = $str;}
public function setEnd($int) { $this->end = $int;}

public function setDescription($str) { $this->description = $str;}

Expand Down
103 changes: 103 additions & 0 deletions models/Context.php
@@ -0,0 +1,103 @@
<?php
require_once("ContextFactory.php");
class Context {
# Instance Variables
private $contextID;
private $sourceID;
private $time;
private $title;
private $url;
private $description;
private $dateCreated;

# Data Methods
public function __construct() {
$this->contextID = 0;
$this->sourceID = 0;
$this->time = "";
$this->title = "";
$this->url = "";
$this->description = "";
$this->dateCreated = 0;
}

public function load($dataArray) {
$this->contextID = $dataArray['contextID'];
$this->sourceID = $dataArray['sourceID'];
$this->time = $dataArray['time'];
$this->title = $dataArray['title'];
$this->url = $dataArray['url'];
$this->description = $dataArray['description'];
$this->dateCreated = $dataArray['dateCreated'];
}

public function validate() {
return true;
}

public function save() {
if(!$this->validate())
return false;

$mysqli = DBConn::mysqli_connect();
if($this->getContextID() != 0) {
// Update an existing context
$queryString = "UPDATE contexts
set contexts.sourceID = '".$this->getSourceID()."',
contexts.time = ".$this->getTime()."',
contexts.title = '".DBConn::clean_for_mysql($this->getTitle())."',
contexts.url = '".DBConn::clean_for_mysql($this->getURL())."',
contexts.description = '".DBConn::clean_for_mysql($this->getDescription())."'
where contexts.id = ".$this->getContextID();

$mysqli->query($queryString)
or print($mysqli->error);
}
else {
// Create a new context
$queryString = "INSERT into contexts
values (0,
".$this->getSourceID().",
".$this->getTime().",
'".DBConn::clean_for_mysql($this->getTitle())."',
'".DBConn::clean_for_mysql($this->getURL())."',
'".DBConn::clean_for_mysql($getDescription)."',
NOW())";

$mysqli->query($queryString)
or print($mysqli->error);

$this->userID = $mysqli->insert_id;
}
}


# Getters
public function getContextID() { return $this->contextID; }

public function getSourceID() { return $this->sourceID; }

public function getTime() { return $this->time; }

public function getTitle() { return $this->title; }

public function getURL() { return $this->url; }

public function getDescription() { return $this->description; }

public function getDateCreated() { return $this->dateCreated; }


# Setters
public function setSourceID($int) { $this->sourceID = $int; }

public function setTime($int) { $this->time = $int; }

public function setTitle($str) { $this->title = $str;}

public function setURL($str) { $this->url = $str;}

public function setDescription($str) { $this->description = $str;}
}

?>
101 changes: 101 additions & 0 deletions models/ContextFactory.php
@@ -0,0 +1,101 @@
<?php
require_once("DBConn.php");
require_once("Context.php");
class ContextFactory {
public static function getObject($objectID) {
$objectID = (int)$objectID;
$mysqli = DBConn::mysqli_connect();
$dataArray = array();

$this->contextID = $dataArray['contextID'];
$this->sourceID = $dataArray['sourceID'];
$this->time = $dataArray['time'];
$this->title = $dataArray['title'];
$this->url = $dataArray['url'];
$this->description = $dataArray['description'];
$this->dateCreated = $dataArray['dateCreated'];
// Load the object data
$queryString = "select contexts.id as contextID,
contexts.source_id as sourceID,
contexts.time as time,
contexts.title as title,
contexts.url as url,
contexts.description as description,
contexts.creation_date as dateCreated
from contexts
where contexts.id = ".$objectID;

$result = $mysqli->query($queryString)
or print($mysqli->error);

if($result->num_rows == 0) {
$result->free();
return new Clip();
}

$resultArray = $result->fetch_assoc();
$result->free();

$dataArray['contextID'] = $resultArray['contextID'];
$dataArray['sourceID'] = $resultArray['sourceID'];
$dataArray['time'] = $resultArray['time'];
$dataArray['title'] = $resultArray['title'];
$dataArray['url'] = $resultArray['url'];
$dataArray['description'] = $resultArray['description'];
$dataArray['dateCreated'] = $resultArray['dateCreated'];

$newObject = new Context();
$newObject->load($dataArray);
return $newObject;
}

public static function getObjects($objects) {
$objectIDs = array();
foreach($objects as $object)
$objectIDs[] = (int)$object;

// If there are no objects being request, return an empty array
if(sizeof($objectIDs) == 0)
return array();

$objectIDString = implode(",",$objectIDs);
$mysqli = DBConn::mysqli_connect();
$dataArrays = array();

// Load the object data
$queryString = "select contexts.id as contextID,
contexts.source_id as sourceID,
contexts.time as time,
contexts.title as title,
contexts.url as url,
contexts.description as description,
contexts.creation_date as dateCreated
from contexts
where contexts.id IN (".$objectIDString.")
order by contexts.time";

$result = $mysqli->query($queryString)
or print($mysqli->error);
while($resultArray = $result->fetch_assoc()) {
$dataArray = array();
$dataArray['contextID'] = $resultArray['contextID'];
$dataArray['sourceID'] = $resultArray['sourceID'];
$dataArray['time'] = $resultArray['time'];
$dataArray['title'] = $resultArray['title'];
$dataArray['url'] = $resultArray['url'];
$dataArray['description'] = $resultArray['description'];
$dataArray['dateCreated'] = $resultArray['dateCreated'];
$dataArrays[] = $dataArray;
}

// Create the objects
$objectArray = array();
foreach($dataArrays as $dataArray) {
$newObject = new Context();
$newObject->load($dataArray);
$objectArray[] = $newObject;
}
return $objectArray;
}
}
?>

0 comments on commit abd69dc

Please sign in to comment.