コード例 #1
0
 /**
  * Up
  **/
 public function up()
 {
     // Add folder/path field
     if ($this->db->tableExists('#__courses_assets') && !$this->db->tableHasField('#__courses_assets', 'path')) {
         $query = "ALTER TABLE `#__courses_assets` ADD `path` VARCHAR(255) NOT NULL DEFAULT ''";
         $this->db->setQuery($query);
         $this->db->query();
         // Set path based on asset id
         $query = "UPDATE `#__courses_assets` SET `path` = CONCAT(`course_id`, '/', `id`)";
         $this->db->setQuery($query);
         $this->db->query();
     }
     // Find all assets with >1 associations
     $query = "SELECT `asset_id`, count(asset_id) AS count FROM `#__courses_asset_associations` GROUP BY `asset_id` HAVING count > 1";
     $this->db->setQuery($query);
     $assetIds = $this->db->loadObjectList();
     if ($assetIds && count($assetIds) > 0) {
         require_once PATH_CORE . DS . 'components' . DS . 'com_courses' . DS . 'models' . DS . 'asset.php';
         foreach ($assetIds as $aa) {
             $query = "SELECT * FROM `#__courses_asset_associations` WHERE `asset_id` = " . (int) $aa->asset_id . " ORDER BY `id` DESC LIMIT " . (int) ($aa->count - 1);
             $this->db->setQuery($query);
             $toChange = $this->db->loadObjectList();
             foreach ($toChange as $a) {
                 $oldAssetId = $a->asset_id;
                 $asset = new \Components\Courses\Models\Asset($oldAssetId);
                 if ($asset->get('id')) {
                     // Get the offering
                     $offering = 0;
                     if ($a->scope == 'asset_group') {
                         $query = "SELECT `offering_id` FROM `#__courses_asset_groups` AS cag";
                         $query .= " LEFT JOIN `#__courses_units` AS cu ON cag.unit_id = cu.id";
                         $query .= " WHERE cag.id = " . $this->db->quote($a->scope_id);
                         $this->db->setQuery($query);
                         $offering = $this->db->loadResult();
                     } else {
                         if ($a->scope == 'offering') {
                             $offering = $a->scope_id;
                         }
                     }
                     $asset->copy(false);
                     $query = "UPDATE `#__courses_asset_associations` SET `asset_id` = " . $this->db->quote($asset->get('id')) . " WHERE `id` = " . $this->db->quote($a->id);
                     $this->db->setQuery($query);
                     $this->db->query();
                     if ($offering) {
                         // Update gradebook entries
                         $query = "UPDATE `#__courses_grade_book` AS g LEFT JOIN `#__courses_members` AS m ON g.member_id = m.id";
                         $query .= " SET `scope_id` = " . (int) $asset->get('id');
                         $query .= " WHERE `scope_id` = " . (int) $oldAssetId;
                         $query .= " AND `scope` = 'asset'";
                         $query .= " AND m.offering_id = " . (int) $offering;
                         $this->db->setQuery($query);
                         $this->db->query();
                         // Update asset_unity
                         $query = "UPDATE `#__courses_asset_unity` AS u LEFT JOIN `#__courses_members` AS m ON u.member_id = m.id";
                         $query .= " SET `asset_id` = " . (int) $asset->get('id');
                         $query .= " WHERE `asset_id` = " . (int) $oldAssetId;
                         $query .= " AND m.offering_id = " . (int) $offering;
                         $this->db->setQuery($query);
                         $this->db->query();
                         // Update asset_views
                         $query = "UPDATE `#__courses_asset_views` AS v LEFT JOIN `#__courses_members` AS m ON v.viewed_by = m.id";
                         $query .= " SET `asset_id` = " . (int) $asset->get('id');
                         $query .= " WHERE `asset_id` = " . (int) $oldAssetId;
                         $query .= " AND m.offering_id = " . (int) $offering;
                         $this->db->setQuery($query);
                         $this->db->query();
                     }
                 } else {
                     $query = "DELETE FROM `#__courses_asset_associations` WHERE `id` = " . $this->db->quote($a->id);
                     $this->db->setQuery($query);
                     $this->db->query();
                 }
             }
         }
     }
 }