from MoinMoin.PageEditor import PageEditor
from MoinMoin import config
import shutil, os, codecs

moon_dir = "/home/festifn/moonedit/test"
moon_pw = ""


# check the os.chmod() lines!!!!

def execute(page_name, request):
    #moon_dir = request.cfg.moon_dir
    #moon_pw = request.cfg.moon_pw

    _ = request.getText
    p = PageEditor(request, page_name)
    msg = ""

    if not moon_dir:
        msg = _("MoonEdit not configured")

    # Locking doesn't work with 1.3 locking code!
    #else:
    #    # try to acquire edit lock
    #    p.lock.locktype = "lock"
    #    p.lock.timeout = 3600 # one hour
    #    
    #    ok, edit_lock_message = p.lock.aquire()
    #    if not ok:
    #        # failed to get the lock
    #        if preview is not None:
    #            edit_lock_message = _('The lock you held timed out, be prepared for editing conflicts!'
    #                                 ) + "<br>" + edit_lock_message
    #       else:
    #           msg = edit_lock_message

    # Did one of the prechecks fail?
    if msg:
        p.send_page(request, msg=msg)
        return


    moon_file = os.path.join(moon_dir, p.page_name_fs)

    # check if already in MoonEdit
    if os.path.exists(moon_file + ".me"):
        if os.path.exists(moon_file):
            content = codecs.open(moon_file, 'rb', config.charset).read()
            
            try:
                # make page file writable again
                # XXXX EVIL!!!!
                os.chmod(p._text_filename(), 0660)
                
                savemsg = p.saveText(content, 0)
                os.remove(moon_file)
                os.remove(moon_file + ".me")
                os.remove(moon_file + ".pw")
            except p.SaveError, msg:
                # msg contain a unicode string
                savemsg = unicode(msg)

        else:
            savemsg = _("Already in MoonEdit but not yet saved")

        # Send page
        request.reset()
        p.send_page(request, msg=savemsg)

    else: # put page into MoonEdit
        
        #check edit permissions
        msg = ""
        if not request.user.may.write(page_name):
            msg = _('You are not allowed to edit this page.')
        elif not p.isWritable():
            msg = _('Page is immutable!')
        if msg:
            p.send_page(request, msg=msg)
            return

        # copy content
        shutil.copyfile(p._text_filename(), moon_file + ".me")
        # write protect the page file
        # XXXX EVIL!!!!
        os.chmod(p._text_filename(), 0440)
    
        # make pw file
        pw = open(moon_file + ".pw", "w")
        pw.write(moon_pw + "\n")
        pw.close()
        msg = _("Page made available in MoonEdit and locked for normal editing")
        p.send_page(request, msg=msg)

    
    
