コード例 #1
0
ファイル: bb9_course.py プロジェクト: nikoloup/reteach
    def handle_file_single(self, file_elem):
	orig_name = file_elem.find('.//NAME').text
        if orig_name is None:
                return
        #nikoloup
        #Get actual filename
        for filename in self.zipfile.namelist():
                if filename.find(orig_name[1:])!=-1 and filename.find('.xml')==-1:
                        moodle_fname = filename
                        break

        try:
                moodle_fname
        except NameError:
                moodle_fname = orig_name
		
        parts = moodle_fname.split('/')
        moodle_fname = parts[len(parts)-1]
        parts1 = moodle_fname.split('__')
        parts2 = moodle_fname.split('.')
        moodle_fname = parts1[0] + '.' + parts2[len(parts2)-1]
        
        fixed_name = utils.fix_filename(moodle_fname, '')
	fname = fixed_name #.encode('utf-8')
	#fixed_name = moodle_fname

	#if utils.only_roman_chars(fixed_name):
	self.reference = fname
コード例 #2
0
ファイル: bb9_course.py プロジェクト: nikoloup/reteach
    def handle_file(self, file_elem):
        orig_name = file_elem.find('.//NAME').text
	if orig_name is None:
		return
	#nikoloup
	#Get actual filename
	for filename in self.zipfile.namelist():
		if filename.find(orig_name[1:])!=-1 and filename.find('.xml')==-1:
			moodle_fname = filename
			break

	try:
		moodle_fname
	except NameError:
		moodle_fname = orig_name

	parts = moodle_fname.split('/')
	moodle_fname = parts[len(parts)-1]
	parts1 = moodle_fname.split('__')
        parts2 = moodle_fname.split('.')
        moodle_fname = parts1[0] + '.' + parts2[len(parts2)-1]
	
        fixed_name = utils.fix_filename(moodle_fname, '')
	#end

        fname = urllib2.quote(fixed_name.encode('utf-8'))
	
        link_name = file_elem.find('.//LINKNAME').attrib['value']

        f_link = '<a href = "$@FILEPHP@$/%s" title = %s>' % ((fname,) * 2)
        f_link = 'Attached File: ' + f_link + '%s</a>' % link_name

        self.alltext = '<br /><br />'.join([self.alltext, f_link])
コード例 #3
0
ファイル: bb9_course.py プロジェクト: developerck/bb2moodle
def create_moodle_zip(blackboard_zip_fname, out_name):
    try:
        shutil.rmtree('elixer_tmp')
        shutil.rmtree('course_files')
    except OSError:
        pass

    course = Course(blackboard_zip_fname)

    moodle_zip = zipfile.ZipFile(out_name, 'w')

    moodle_xml_str = utils.convert(course).encode('utf-8')

    moodle_zip.writestr('moodle.xml', moodle_xml_str)

    err_fh = open(os.path.devnull, 'w')

    command = ('unzip %s -d elixer_tmp' % blackboard_zip_fname).split(' ')
    subprocess.Popen(command, stdout=err_fh, stderr=err_fh).communicate()

    skip_parent = False

    for root, dirs, files in os.walk('elixer_tmp'):
        if not skip_parent:
            skip_parent = True
            continue

        for bb_fname in files:
            moodle_fname = bb_fname
            if moodle_fname.endswith('.xml'):
                continue

            if bb_fname.startswith('!'):
                if '.' in bb_fname:
                    ext, fname = [
                        s[::-1] for s in bb_fname[1:][::-1].split('.', 1)
                    ]
                    moodle_fname = (base64.b16decode(fname.upper()) + '.' +
                                    ext)
                else:
                    ext, fname = '', bb_fname[1:]
                    moodle_fname = (base64.b16decode(fname.upper()))

                moodle_fname = urllib2.unquote(moodle_fname)

            res_num = root.split(os.sep,
                                 1)[1].split(os.sep)[0].replace('res', '')

            fixed_filename = utils.fix_filename(moodle_fname, res_num)

            bb_fname = os.path.join(root, bb_fname)

            moodle_fname = os.path.join('course_files', fixed_filename)

            moodle_zip.write(bb_fname, moodle_fname)

    shutil.rmtree('elixer_tmp')

    moodle_zip.close()
コード例 #4
0
    def _load(self):
        parts = ('FORMALTITLE', 'GIVEN', 'FAMILY')
        data_parts = [
            self.xml.find('.//%s' % p).attrib['value'] for p in parts
        ]

        self.name = ' '.join([p for p in data_parts if p])

        email = self.xml.find('.//EMAIL').attrib['value']
        phone = self.xml.find('.//PHONE').attrib['value']
        hours = self.xml.find('.//HOURS').attrib['value']
        address = self.xml.find('.//ADDRESS').attrib['value']
        homepage = self.xml.find('.//HOMEPAGE').attrib['value']
        image = self.xml.find('.//IMAGE').attrib['value']
        notes = self.xml.find('.//TEXT').text or ''

        if image:
            image = utils.fix_filename(image, self.res_num)

        self.res_type = 'html'

        self.alltext = '''
            <table border = "0" width = "50%%">
              <tr>
                <td colspan = "2"><h3>%s</h3></td>
              </tr>

              <tr>
                <td>
                  <ul>
                    <li><b>Email</b>: %s</li>
                    <li><b>Work Phone</b>: %s</li>
                    <li><b>Office Location</b>: %s</li>
                    <li><b>Office Hours</b>: %s</li>
                    <li><b>Personal Link</b>: %s</li>
                  </ul>
                </td>
        ''' % (self.name, email, phone, hours, address, homepage)

        if image:
            self.alltext += '''
                <td>
                  <img src = "$@FILEPHP@$/%s" alt="" width="150" height="150"/>
                </td>
            ''' % image

        self.alltext += '''
              </tr>
              <tr>
                <td colspan = "2">%s</td>
              </tr>
            </table>
        ''' % notes

        formal_title = self.xml.find('.//FORMALTITLE')

        self.type = 'resource'
コード例 #5
0
    def handle_embedded_file(self, text):
        before, rest = text.split('@[email protected]@X@', 1)

        filename, after = rest.split('"', 1)

        after = '"' + after

        filename = utils.fix_filename(filename, self.res_num)

        return before + '$@FILEPHP@$/' + filename + after
コード例 #6
0
ファイル: bb9_course.py プロジェクト: nikoloup/reteach
    def handle_embedded_file(self, text):
	before, rest = text.split('@[email protected]@X@', 1)

        filename, after = rest.split('"', 1)

        after = '"' + after

        filename = utils.fix_filename(filename, self.res_num)

        return before + '$@FILEPHP@$/' + filename + after
コード例 #7
0
ファイル: bb9_course.py プロジェクト: nikoloup/reteach
    def _load(self):
        parts = ('FORMALTITLE', 'GIVEN', 'FAMILY')
        data_parts = [self.xml.find('.//%s' % p).attrib['value'] for p in parts]

        self.name = ' '.join([p for p in data_parts if p])

        email = self.xml.find('.//EMAIL').attrib['value']
        phone = self.xml.find('.//PHONE').attrib['value']
        hours = self.xml.find('.//HOURS').attrib['value']
        address = self.xml.find('.//ADDRESS').attrib['value']
        homepage = self.xml.find('.//HOMEPAGE').attrib['value']
        image = self.xml.find('.//IMAGE').attrib['value']
        notes = self.xml.find('.//TEXT').text or ''

        if image:
            image = utils.fix_filename(image, self.res_num)

        self.res_type = 'html'

        self.alltext =  '''
            <table border = "0" width = "50%%">
              <tr>
                <td colspan = "2"><h3>%s</h3></td>
              </tr>

              <tr>
                <td>
                  <ul>
                    <li><b>Email</b>: %s</li>
                    <li><b>Work Phone</b>: %s</li>
                    <li><b>Office Location</b>: %s</li>
                    <li><b>Office Hours</b>: %s</li>
                    <li><b>Personal Link</b>: %s</li>
                  </ul>
                </td>
        ''' % (self.name, email, phone, hours, address, homepage)

        if image:
            self.alltext += '''
                <td>
                  <img src = "$@FILEPHP@$/%s" alt="" width="150" height="150"/>
                </td>
            ''' % image

        self.alltext += '''
              </tr>
              <tr>
                <td colspan = "2">%s</td>
              </tr>
            </table>
        ''' % notes

        formal_title = self.xml.find('.//FORMALTITLE')

        self.type = 'resource'
コード例 #8
0
    def handle_file(self, file_elem):
        orig_name = file_elem.find('.//NAME').text

        fixed_name = utils.fix_filename(orig_name, self.res_num)

        fname = urllib2.quote(fixed_name.encode('utf-8'))

        link_name = file_elem.find('.//LINKNAME').attrib['value']

        f_link = '<a href = "$@FILEPHP@$/%s" title = %s>' % ((fname, ) * 2)
        f_link = 'Attached File: ' + f_link + '%s</a>' % link_name

        self.alltext = '<br /><br />'.join([self.alltext, f_link])
コード例 #9
0
ファイル: bb9_course.py プロジェクト: developerck/bb2moodle
    def handle_embedded_stubfile(self, text):
        try:
            before, rest = text.split(
                '@[email protected]@X@bbcswebdav', 1)

            filename, after = rest.split('"', 1)

            after = '"' + after

            filename = utils.fix_filename(filename, self.res_num)
        except Exception as e:
            print "exception "
        return before + '$@FILEPHP@$/' + filename + after
コード例 #10
0
ファイル: bb9_course.py プロジェクト: developerck/bb2moodle
    def handle_embedded_stubfile(self, text):

        if text.find('@[email protected]@X@bbcswebdav') is -1:
            return text
        try:

            before, rest = text.split(
                '@[email protected]@X@bbcswebdav', 1)
            filename, after = rest.split('"', 1)

            after = '"' + after

            filename = utils.fix_filename(filename, self.res_num)
            filename = filename.strip("/")
            return before + '$@FILEPHP@$/' + filename + after
        except Exception as e:
            return text
コード例 #11
0
ファイル: bb9_course.py プロジェクト: developerck/bb2moodle
    def __init__(self, xml, res_num):
        if self.__class__ == 'Question':
            raise NotImplementedError('Do not instantiate base class')
        self.res_num = res_num
        ContentItem.__init__(self, xml)

        if not self.name:
            self.name = '________'

        self.name = re.sub(r'<.*?>', '', self.name).strip()

        query = './/flow[@class="FILE_BLOCK"]//matapplication'

        for elem in self.xml.findall(query):
            self.image = utils.fix_filename(elem.attrib['label'], res_num)

        self.stamp = utils.generate_stamp()
        self.id = utils.m_hash(self)
コード例 #12
0
ファイル: bb9_course.py プロジェクト: nikoloup/reteach
    def __init__(self, xml, res_num):
        if self.__class__ == 'Question':
            raise NotImplementedError('Do not instantiate base class')

        ContentItem.__init__(self, xml)

        if not self.name:
            self.name = '________'

        self.name = re.sub(r'<.*?>', '', self.name).strip()
        self.res_num = res_num

        query = './/flow[@class="FILE_BLOCK"]//matapplication'

        for elem in self.xml.findall(query):
            self.image = utils.fix_filename(elem.attrib['label'], res_num)

        self.stamp = utils.generate_stamp()
        self.id = utils.m_hash(self)
コード例 #13
0
ファイル: bb9_course.py プロジェクト: nikoloup/reteach
def create_moodle_zip(blackboard_zip_fname, out_name, course_id, parameters):
    try:
        shutil.rmtree('elixer_tmp')
        shutil.rmtree('course_files')
    except OSError:
        pass

    course = Course(blackboard_zip_fname, course_id, parameters)

    moodle_zip = zipfile.ZipFile(out_name, 'w')

    moodle_xml_str = utils.convert(course).encode('utf-8')

    moodle_zip.writestr('moodle.xml', moodle_xml_str)

    err_fh = open(os.path.devnull, 'w')

    #nikoloup
    #fix unzip encoding issues
    #command = ('unzip %s -d elixer_tmp' % blackboard_zip_fname).split(' ')
    #subprocess.Popen(command, stdout=err_fh, stderr=err_fh).communicate()
    bbzip = zipfile.ZipFile(blackboard_zip_fname, 'r')
    bbzip.extractall('elixer_tmp') 
    #end

    skip_parent = False

    for root, dirs, files in os.walk('elixer_tmp'):
        if not skip_parent:
            skip_parent = True
            continue

        for bb_fname in files:
            moodle_fname = bb_fname
	    #nikoloup
	    #exclude xml files
	    if moodle_fname.find('.xml')!=-1:
		continue

	    #nikoloup
	    #filename cleanup
	    parts1 = moodle_fname.split('__')
	    parts2 = moodle_fname.split('.')
	    moodle_fname = parts1[0] + '.' + parts2[len(parts2)-1]
	    #end
	    
            if bb_fname.startswith('!'):
                if '.' in bb_fname:
                    ext, fname = [s[::-1] for s in bb_fname[1:][::-1].split('.', 1)]
                    moodle_fname = (base64.b16decode(fname.upper()) + '.' + ext)
                else:
                    ext, fname = '', bb_fname[1:]
                    moodle_fname = (base64.b16decode(fname.upper()))

		moodle_fname = urllib2.unquote(moodle_fname)

	    #nikoloup
	    #filename cleanup
            #res_num = root.split(os.sep, 1)[1].split(os.sep)[0].replace('res', '')
	    res_num = ''
	    #end

            fixed_filename = utils.fix_filename(moodle_fname, res_num)
	    
            bb_fname = os.path.join(root, bb_fname)

            moodle_fname = os.path.join('course_files', fixed_filename)

            moodle_zip.write(bb_fname, moodle_fname)

    shutil.rmtree('elixer_tmp')

    moodle_zip.close()