'Only called if cloning within this store or if env doesn\'t set up mixed.
* copy the courseware'

def clone_course(self, source_course_id, dest_course_id, user_id, fields=None, **kwargs):

    if (not self.has_course(source_course_id)):
        raise ItemNotFoundError('Cannot    find    a    course    at    {0}.    Aborting'.format(source_course_id))
    with self.bulk_operations(dest_course_id):
        query = self._course_key_to_son(dest_course_id)
        query['_id.category'] = {'$nin': ['course', 'about']}
        if (self.collection.find(query).limit(1).count() > 0):
            raise DuplicateCourseError(dest_course_id, 'Course    at    destination    {0}    is    not    an    empty    course.    You    can    only    clone    into    an    empty    course.    Aborting...'.format(dest_course_id))
        super(DraftModuleStore, self).clone_course(source_course_id, dest_course_id, user_id, fields)
        new_course = self.get_course(dest_course_id)
        if (new_course is None):
            new_course = self.create_course(dest_course_id.org, dest_course_id.course, dest_course_id.run, user_id, fields=fields)
        else:
            for (key, value) in fields.iteritems():
                setattr(new_course, key, value)
            self.update_item(new_course, user_id)
        modules = self.get_items(source_course_id, revision=ModuleStoreEnum.RevisionOption.published_only)
        self._clone_modules(modules, dest_course_id, user_id)
        course_location = dest_course_id.make_usage_key('course', dest_course_id.run)
        self.publish(course_location, user_id)
        modules = self.get_items(source_course_id, revision=ModuleStoreEnum.RevisionOption.draft_only)
        self._clone_modules(modules, dest_course_id, user_id)
        return True
