From a89ae2a82b5be0541a794fb7ef17348d41db9a7b Mon Sep 17 00:00:00 2001
From: Tim Steiner <tsteiner2@unl.edu>
Date: Mon, 9 Dec 2013 13:48:18 -0600
Subject: [PATCH] Add updating of bulletin sections to course request Make
 Official action. @2h00

---
 .../modules/bulletin/models/SectionModel.php  | 24 +++++++++++++------
 .../ApprovalActionMakeOfficialModel.php       | 10 ++++++++
 application/modules/cron/models/JobsModel.php | 12 ++++------
 3 files changed, 31 insertions(+), 15 deletions(-)

diff --git a/application/modules/bulletin/models/SectionModel.php b/application/modules/bulletin/models/SectionModel.php
index fc3f99b0..2e97dbaa 100644
--- a/application/modules/bulletin/models/SectionModel.php
+++ b/application/modules/bulletin/models/SectionModel.php
@@ -650,7 +650,7 @@ EOF;
         return $departmentSectionNames;
     }
 
-    static public function updateSubjectCode($oldCode, $newCode)
+    static public function updateCourseCode($oldCode, $newCode)
     {
         if ($oldCode == $newCode) {
             return;
@@ -661,7 +661,9 @@ EOF;
         $majors = Bulletin_UtilityModel::getAllMajors();
         $year = 2014;
 
+        $requestsToConsider = new Unl_Model_Collection('Requests_RequestModel');
         foreach ($colleges as $collegeId => $college) {
+            set_time_limit(max(5, ini_get('max_execution_time')));
             $requests = Bulletin_SectionModel::findActiveRequestByCollegeAndMajorId($college, NULL);
             if (count($requests)) {
                 $request = $requests->pop();
@@ -673,7 +675,10 @@ EOF;
                 $section->setCollegeId($collegeId);
             }
 
-            self::_updateSubjectCode($oldCode, $newCode, $request, $section);
+            $result = self::_updateCourseCode($oldCode, $newCode, $request, $section);
+            if ($result instanceof Requests_RequestModel) {
+                $requestsToConsider[$request->getId()] = $result;
+            }
 
             foreach ($collegeMajors[$college] as $majorId => $major) {
                 $requests = Bulletin_SectionModel::findActiveRequestByCollegeAndMajorId($college, $majorId);
@@ -688,12 +693,17 @@ EOF;
                     $section->setMajorId($majorId);
                 }
 
-                self::_updateSubjectCode($oldCode, $newCode, $request, $section);
+                $result = self::_updateCourseCode($oldCode, $newCode, $request, $section);
+                if ($result instanceof Requests_RequestModel) {
+                    $requestsToConsider[$request->getId()] = $result;
+                }
             }
         }
+
+        Requests_ApprovalChainModel::consider($requestsToConsider);
     }
 
-    static protected function _updateSubjectCode($oldCode, $newCode, Requests_RequestModel $request, Bulletin_SectionModel $section)
+    static protected function _updateCourseCode($oldCode, $newCode, Requests_RequestModel $request, Bulletin_SectionModel $section)
     {
         $path = Bulletin_RepositoryModel::getInstance()->getFilePathForCollegeMajorYear(
             $section->getCollegeLong(),
@@ -760,8 +770,6 @@ EOF;
             Requests_RequestModel::save($request);
             $section->setRequest($request);
             Bulletin_SectionModel::save($section);
-        } else {
-            echo $request->getId() . PHP_EOL;
         }
 
         Bulletin_RepositoryModel::getInstance()->saveFileContents(
@@ -778,6 +786,8 @@ EOF;
             $diffHtml
         );
 
-        Requests_ApprovalChainModel::consider($request);
+        if ($request->getType() == 'BulletinAdminEdit') {
+            return $request;
+        }
     }
 }
\ No newline at end of file
diff --git a/application/modules/courses/models/ApprovalActionMakeOfficialModel.php b/application/modules/courses/models/ApprovalActionMakeOfficialModel.php
index a2a50516..b5e5278f 100644
--- a/application/modules/courses/models/ApprovalActionMakeOfficialModel.php
+++ b/application/modules/courses/models/ApprovalActionMakeOfficialModel.php
@@ -126,6 +126,16 @@ class Courses_ApprovalActionMakeOfficialModel extends Requests_ApprovalActionMod
                     $change['to']['courseNumber'],
                     $change['to']['courseLetter']
                 );
+
+                $cronJob = Cron_JobsModel::fetchNew();
+                $cronJob->setDate(new Zend_Date());
+                $cronJob->setClass('Bulletin_SectionModel');
+                $cronJob->setMethod('updateCourseCode');
+                $cronJob->setArguments($change['from'], $change['to']);
+
+                $collection = new Unl_Model_Collection('Cron_JobsModel');
+                $collection[] = $cronJob;
+                Cron_JobsModel::save($collection);
             }
         }
         
diff --git a/application/modules/cron/models/JobsModel.php b/application/modules/cron/models/JobsModel.php
index 8667d7b4..036cc9ed 100644
--- a/application/modules/cron/models/JobsModel.php
+++ b/application/modules/cron/models/JobsModel.php
@@ -234,20 +234,16 @@ class Cron_JobsModel extends Unl_Model
     
     public function setClass($class)
     {
-    	$this->_data['class'] = $class;
+        $this->_data['class'] = $class;
     }
     
     public function setMethod($method)
     {
-    	$this->_data['method'] = $method;
+        $this->_data['method'] = $method;
     }
     
-    public function setArguments($arguments)
+    public function setArguments()
     {
-    	if (!is_array($arguments)) {
-    		throw new Zend_Exception('$arguments must be an array.');
-    	}
-    	
-    	$this->_data['arguments'] = serialize($arguments);
+        $this->_data['arguments'] = serialize(func_get_args());
     }
 }
\ No newline at end of file
-- 
GitLab