Skip to content

Commit

Permalink
New feature #5 - add RSS feed to categories and cities
Browse files Browse the repository at this point in the history
  • Loading branch information
elinoretenorio committed Nov 14, 2015
1 parent f6b5069 commit 9379852
Show file tree
Hide file tree
Showing 10 changed files with 97 additions and 6 deletions.
35 changes: 35 additions & 0 deletions controllers/categories.php
Expand Up @@ -16,6 +16,41 @@
$app->get('/', function () use ($app) {
$app->redirect(BASE_URL);
});

// rss category jobs
$app->get('/:id/:name/rss', function ($id, $name) use ($app) {

global $lang;

$id = (int)$id;
$cat = new Categories($id);
$info = $cat->findCategory();

$jobs = $cat->findAllCategoryJobs();

$app->response->headers->set('Content-Type', 'application/rss+xml');

$xml = new SimpleXMLElement('<rss version="2.0"></rss>');
$xml->addChild('channel');
$xml->channel->addChild('title', $info->name ." ". $lang->t('jobs|jobs') .' | '. APP_NAME);
$xml->channel->addChild('link', BASE_URL . "categories/{$info->id}/{$info->url}");
$xml->channel->addChild('description', htmlentities($info->description));
foreach ($jobs as $job) {
$item = $xml->channel->addChild('item');
$item->addChild('title', htmlentities($job->title));
$item->addChild('link', BASE_URL . "jobs/{$job->id}/". slugify($job->title ." {$lang->t('jobs|at')} ". $job->company_name));
$item->addChild('description', htmlentities($job->description));
$guid = $item->addChild('guid', $job->id .'@' . BASE_URL);
$guid->addAttribute('isPermaLink', "false");
$item->addChild('pubDate', date(DATE_RSS, strtotime($job->created)));
}
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());
echo $dom->saveXML();

});

// get category jobs
$app->get('/:id(/:name(/:page))', function ($id, $name=null, $page=1) use ($app) {
Expand Down
35 changes: 35 additions & 0 deletions controllers/cities.php
Expand Up @@ -16,6 +16,41 @@
$app->get('/', function () use ($app) {
$app->redirect(BASE_URL);
});

// rss city jobs
$app->get('/:id/:name/rss', function ($id, $name) use ($app) {

global $lang;

$id = (int)$id;
$city = new Cities($id);
$info = $city->findCity();

$jobs = $city->findAllCityJobs();

$app->response->headers->set('Content-Type', 'application/rss+xml');

$xml = new SimpleXMLElement('<rss version="2.0"></rss>');
$xml->addChild('channel');
$xml->channel->addChild('title', $info->name ." ". $lang->t('jobs|jobs') .' | '. APP_NAME);
$xml->channel->addChild('link', BASE_URL . "cities/{$info->id}/{$info->url}");
$xml->channel->addChild('description', htmlentities($info->description));
foreach ($jobs as $job) {
$item = $xml->channel->addChild('item');
$item->addChild('title', htmlentities($job->title));
$item->addChild('link', BASE_URL . "jobs/{$job->id}/". slugify($job->title ." {$lang->t('jobs|at')} ". $job->company_name));
$item->addChild('description', htmlentities($job->description));
$guid = $item->addChild('guid', $job->id .'@' . BASE_URL);
$guid->addAttribute('isPermaLink', "false");
$item->addChild('pubDate', date(DATE_RSS, strtotime($job->created)));
}
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->loadXML($xml->asXML());
echo $dom->saveXML();

});

// get city jobs
$app->get('/:id(/:name(/:page))', function ($id, $name=null, $page=1) use ($app) {
Expand Down
3 changes: 2 additions & 1 deletion models/Applications.php
Expand Up @@ -28,8 +28,9 @@ public function getJobTitle()

public function getJobTitleURL()
{
global $lang;
$job = R::load('jobs', $this->_job_id);
$job_url = $job->title . ' at ' . $job->company_name;
$job_url = $job->title ." {$lang->t('jobs|at')} ". $job->company_name;
return slugify($job_url);
}

Expand Down
7 changes: 7 additions & 0 deletions models/Categories.php
Expand Up @@ -30,6 +30,13 @@ public function findCategoryJobs($start, $limit)
array(':category'=>$this->_id, ':start'=>$start, ':limit'=>$limit));
return $jobs;
}

public function findAllCategoryJobs()
{
$jobs = R::findAll('jobs', " status=1 AND category=:category ORDER BY created DESC LIMIT 0, 100",
array(':category'=>$this->_id));
return $jobs;
}

public function countCategoryJobs() {
$count = R::count('jobs', " status=1 AND category=:category ", array(':category'=>$this->_id));
Expand Down
7 changes: 7 additions & 0 deletions models/Cities.php
Expand Up @@ -30,6 +30,13 @@ public function findCityJobs($start, $limit)
array(':city'=>$this->_id, ':start'=>$start, ':limit'=>$limit));
return $jobs;
}

public function findAllCityJobs()
{
$jobs = R::findAll('jobs', " status=1 AND city=:city ORDER BY created DESC LIMIT 0, 100",
array(':city'=>$this->_id));
return $jobs;
}

public function countCityJobs() {
$count = R::count('jobs', " status=1 AND city=:city ", array(':city'=>$this->_id));
Expand Down
6 changes: 4 additions & 2 deletions models/Jobs.php
Expand Up @@ -172,14 +172,16 @@ public function getStatus()

public function getSlugTitle()
{
global $lang;
$job = $this->showJobDetails();
return slugify($job->title . ' at ' . $job->company_name);
return slugify($job->title ." {$lang->t('jobs|at')} ". $job->company_name);
}

public function getSeoTitle()
{
global $lang;
$job = $this->showJobDetails();
return $job->title . ' at ' . $job->company_name;
return $job->title ." {$lang->t('jobs|at')} ". $job->company_name;
}

}
4 changes: 4 additions & 0 deletions views/default/assets/css/theme.css
Expand Up @@ -25,4 +25,8 @@ body {

.job-highlight {
background-color: #ffc;
}

.job-rss {
background-color: #ff6600 !important;
}
2 changes: 1 addition & 1 deletion views/default/categories.php
Expand Up @@ -2,7 +2,7 @@
<?php include 'search-form.php'; ?>

<?php include 'flash.php'; ?>
<h3><?php _e($categ->name); ?> <?php echo $lang->t('jobs|jobs'); ?></h3>
<h3><?php _e($categ->name); ?> <?php echo $lang->t('jobs|jobs'); ?> <a href="<?php _e(BASE_URL ."categories/{$categ->id}/{$categ->url}/rss"); ?>" target="_blank" class="badge job-rss">RSS</a></h3>
<div class="list-group">
<?php foreach($jobs as $job): ?>
<a class="list-group-item <?php if ($job->is_featured): ?>job-highlight<?php endif; ?>" href="<?php _e(BASE_URL ."jobs/{$job->id}/". slugify($job->title ." {$lang->t('jobs|at')} ". $job->company_name)); ?>">
Expand Down
2 changes: 1 addition & 1 deletion views/default/cities.php
Expand Up @@ -2,7 +2,7 @@
<?php include 'search-form.php'; ?>

<?php include 'flash.php'; ?>
<h3><?php _e($city->name); ?> <?php echo $lang->t('jobs|jobs'); ?></h3>
<h3><?php _e($city->name); ?> <?php echo $lang->t('jobs|jobs'); ?> <a href="<?php _e(BASE_URL ."cities/{$city->id}/{$city->url}/rss"); ?>" target="_blank" class="badge job-rss">RSS</a></h3>
<div class="list-group">
<?php foreach($jobs as $job): ?>
<a class="list-group-item <?php if ($job->is_featured): ?>job-highlight<?php endif; ?>" href="<?php _e(BASE_URL ."jobs/{$job->id}/". slugify($job->title ." {$lang->t('jobs|at')} ". $job->company_name)); ?>">
Expand Down
2 changes: 1 addition & 1 deletion views/default/home.php
Expand Up @@ -4,7 +4,7 @@
<?php include 'flash.php'; ?>
<?php foreach($categories as $category): ?>
<a name="<?php _e($category->url); ?>"></a>
<h3><?php _e($category->name); ?> <?php echo $lang->t('jobs|jobs'); ?></h3>
<h3><?php _e($category->name); ?> <?php echo $lang->t('jobs|jobs'); ?> <a href="<?php _e(BASE_URL ."categories/{$category->id}/{$category->url}/rss"); ?>" target="_blank" class="badge job-rss">RSS</a></h3>
<div class="list-group">
<?php foreach($jobs[$category->id] as $job): ?>
<a class="list-group-item <?php if ($job->is_featured): ?>job-highlight<?php endif; ?>" href="<?php _e(BASE_URL ."jobs/{$job->id}/". slugify($job->title ." {$lang->t('jobs|at')} ". $job->company_name)); ?>">
Expand Down

0 comments on commit 9379852

Please sign in to comment.