1
0
Fork 0
mirror of https://github.com/Oreolek/kangana.git synced 2024-05-05 02:28:17 +03:00

Resolves #13 - group mode

This commit is contained in:
Alexander Yakovlev 2016-11-13 21:33:27 +07:00
parent 1a949461f9
commit 31a285c55c
5 changed files with 84 additions and 6 deletions

View file

@ -111,7 +111,24 @@ class Model_Course extends ORM {
**/
public static function get_ids()
{
return DB::select('course_id')->distinct(TRUE)->from('clients_courses')->execute()->as_array(NULL, 'course_id');
$use_groups = Kohana::$config->load('common.groupmode');
if( ! $use_groups)
{
return DB::select('course_id')
->distinct(TRUE)
->from('clients_courses')
->execute()
->as_array(NULL, 'course_id');
}
else
{
$groups = Model_Group::get_ids();
return DB::select('id')
->from('courses')
->where('group_id', 'IN', $groups)
->execute()
->as_array(NULL, 'id');
}
}
public static function get_period($course_id)
@ -130,13 +147,31 @@ class Model_Course extends ORM {
->order_by('order');
return $query->execute()->as_array(NULL, 'id');
}
public static function get_client_ids($course_id)
{
return DB::select('client_id')
->from('clients_courses')
->where('course_id', '=', $course_id)
->execute()
->get('client_id');
$use_groups = Kohana::$config->load('common.groupmode');
if( ! $use_groups)
{
return DB::select('client_id')
->from('clients_courses')
->where('course_id', '=', $course_id)
->execute()
->get('client_id');
}
else
{
$group_id = DB::select('group_id')
->from('courses')
->where('id', '=', $course_id)
->execute()
->get('group_id');
return DB::select('client_id')
->from('clients_groups')
->where('group_id', '=', $group_id)
->execute()
->get('client_id');
}
}
/**

View file

@ -48,4 +48,12 @@ class Model_Group extends ORM {
{
return self::count($this->id);
}
/**
* Get ID of all groups which have subscribers
**/
public static function get_ids()
{
return DB::select('group_id')->distinct(TRUE)->from('clients_groups')->execute()->as_array(NULL, 'group_id');
}
}

View file

@ -17,10 +17,12 @@ class Task_Prepare extends Minion_Task
if (is_null($course))
{
Log::instance()->add(Log::ERROR, 'Course ID is NULL when preparing');
echo "Course ID is NULL when preparing\n";
return;
}
$count = Model_Course::count_letters($course);
if ($count == 0)
echo "No letters found in course $course; skipping.\n";
return;
$period = Model_Course::get_period($course);
$clients = Model_Course::get_client_ids($course, $period);
@ -46,6 +48,8 @@ class Task_Prepare extends Minion_Task
if ($letter !== FALSE)
{
Model_Task::prepare($client_id, $letter);
} else {
echo "No letters to prepare.\n";
}
} else {
echo "Letter won't be prepared because it's too early to send it.\n";
@ -83,6 +87,8 @@ class Task_Prepare extends Minion_Task
}
catch(Database_Exception $e)
{
echo $e->getMessage();
Log::instance()->add(Log::ERROR, $e->getMessage());
$db->rollback();
}
}

View file

@ -15,6 +15,20 @@ class CoursesTest extends Unittest_Database_TestCase
return $this->createXMLDataSet(Kohana::find_file('tests', 'test_data/courses', 'xml'));
}
function test_get_ids()
{
$courses = Model_Course::get_ids();
$this->assertNotEmpty($courses);
$this->assertContains(1, $courses);
}
function test_get_clients()
{
$clients = Model_Course::get_client_ids(1);
$this->assertNotEmpty($clients);
$this->assertContains('1', $clients);
}
/**
* @group Mail
**/

View file

@ -1,17 +1,27 @@
<?xml version="1.0" ?>
<dataset>
<table name="groups">
<column>id</column>
<column>name</column>
<row>
<value>1</value>
<value>Test Group</value>
</row>
</table>
<table name="courses">
<column>id</column>
<column>title</column>
<column>description</column>
<column>period</column>
<column>price</column>
<column>group_id</column>
<row>
<value>1</value>
<value>Test course</value>
<value>Application testing purposes</value>
<value>1</value>
<value>0</value>
<value>1</value>
</row>
</table>
<table name="clients">
@ -36,6 +46,11 @@
<value>1</value>
</row>
</table>
<table name="clients_groups">
<column>id</column>
<column>client_id</column>
<column>group_id</column>
</table>
<table name="letters">
<column>id</column>
<column>text</column>