Пример #1
0
def run_search(pif):
    # form['var'] is now a possibility
    pif.render.hierarchy_append('/', 'Home')
    pif.render.hierarchy_append('/database.php', 'Database')
    pif.render.hierarchy_append(pif.request_uri, 'Model Search')
    mods = None
    pif.render.print_html()
    if pif.form.has('date'):
        return date_search(pif, pif.form.get_str('dt'), pif.form.get_str('yr'))
    if pif.form.has('query'):
        targ = pif.form.get_str('query')
        firstyear = pif.form.get_int('syear', 1)
        lastyear = pif.form.get_int('eyear', 9999)
        pif.render.title = 'Models matching name: ' + targ
        mods = search_name(pif)
        mods = [
            pif.dbh.modify_man_item(x) for x in mods
            if x['section.page_id'] in (
                'manls', 'manno') and int(x['base_id.first_year']) >= firstyear
            and int(x['base_id.first_year']) <= lastyear
        ]
    elif pif.form.has('id'):
        targ = pif.form.get_str('id')
        mods = search_id(pif)
        if mods is None:
            raise useful.SimpleError(
                "Your query parameters do not make sense.  Please try something different."
            )
        pif.render.title = 'Models matching ID: ' + targ
    else:
        raise useful.SimpleError(
            "Your query parameters do not make sense.  Please try something different."
        )
    if not mods:
        raise useful.SimpleError(
            "Your query did not produce any models.  Sorry 'bout that.")

    mods.sort(key=lambda x: x['rawname'])
    var_id = pif.form.get_str('var')
    if var_id:
        pif.render.set_button_comment(pif,
                                      'query=%s' % (pif.form.get_str('query')))
        llineup = create_var_lineup(pif, mods, var_id)
    else:
        pif.render.set_button_comment(pif,
                                      'query=%s' % (pif.form.get_str('query')))
        llineup = create_lineup(pif, mods)

    pif.render.format_matrix_for_template(llineup)
    return pif.render.format_template('simplematrix.html', llineup=llineup)
Пример #2
0
def change_password_main(pif):
    pif.render.title = 'Change Password'
    pif.render.hide_title = False
    pif.render.print_html()

    if not pif.user_id:
        raise useful.SimpleError("It doesn't look like you're logged in!")
    if pif.form.has('id') and pif.is_allowed('a') and pif.form.get_int('id') != pif.user_id:
        user = pif.dbh.fetch_user(pif.form.get_int('id'))
    else:
        user = pif.user
    if not user:
        raise useful.SimpleError('That user record ({}) was not found.'.format(pif.user_id))

    if pif.is_allowed('a') and 'p1' in pif.form:
        user_id = pif.form.get_int('id')
        if pif.form.get_str('p1') != pif.form.get_str('p2'):
            useful.warn("The new passwords don't match!")
        else:
            pif.dbh.update_password(user_id, pif.form.get_str('p2'))
            useful.warn("This password has been changed.")
    elif 'op' in pif.form:
        newuser = pif.dbh.fetch_user(user_id=pif.user_id, passwd=pif.form.get_str('op'))
        if not newuser:
            useful.warn("That password isn't correct!")
        elif pif.form.get_str('p1') != pif.form.get_str('p2'):
            useful.warn("The new passwords don't match!")
        else:
            pif.dbh.update_password(pif.user_id, pif.form.get_str('p2'))
            pif.dbh.update_user(pif.user_id, ckey=uuid.uuid4())
            pif.create_cookie()
            useful.warn("Your password has been changed.")

    entries = [
        {'title': 'Old password:'******'value': '<input type="password" name="op">'},
        {'title': 'New password:'******'value': '<input type="password" name="p1">'},
        {'title': 'Retry new password:'******'value': '<input type="password" name="p2">'},
    ]
    lsection = {
        'columns': ['title', 'value'],
        'range': [{'entry': entries}],
        'note': '',
        'noheaders': True,
        'header': pif.render.format_form_start(method='post', token=pif.dbh.create_token()),
        'footer': pif.render.format_hidden_input({'id': user['id']}) + pif.render.format_button_input() + "</form>",
    }
    return pif.render.format_template(
        'simplelistix.html',
        header='''<br>You have requested to change your password.<br>''',
        llineup={'section': [lsection]}, nofooter=True)
Пример #3
0
def code2_model(pif):
    mod_id = pif.form.get_id('mod_id')
    cat_id = pif.form.get_str('cat')
    pif.render.print_html()
    pif.render.hierarchy_append('/', 'Home')
    pif.render.hierarchy_append('/database.php', 'Database')
    pif.render.hierarchy_append('/cgi-bin/code2.cgi', 'Code 2 Models')
    pif.render.set_button_comment(pif)

    mod = pif.dbh.modify_man_item(pif.dbh.fetch_casting(mod_id))
    img = pif.render.format_image_required(mod_id, largest=mbdata.IMG_SIZ_MEDIUM, pdir=config.IMG_DIR_MAN)
    header = '<center>%s<br><b>%s: %s</b></center><p>' % (img, mod['id'], mod['name'])
    lsec = pif.dbh.fetch_section(page_id=pif.page_id, category=cat_id)
    if not lsec:
        raise useful.SimpleError('No models found.')
    lsec = lsec.todict()
    pif.render.hierarchy_append('/cgi-bin/code2.cgi?section=%s' % lsec['id'], lsec['name'])
    pif.render.hierarchy_append('/cgi-bin/code2.cgi?mod_id=%s&cat=%s' % (mod['id'], cat_id), mod['id'])
    lsec['range'] = [{'entry': []}]
    mvars = pif.dbh.fetch_variation_by_select(mod_id, pif.page_id, '', category=cat_id)
    for var in mvars:
        # useful.write_comment(var)
        entry = {'text': models.add_model_var_pic_link(pif, pif.dbh.depref('v', var))}
        lsec['range'][0]['entry'].append(entry)

    llineup = {
        'section': [lsec],
        'header': header,
    }
    pif.render.format_matrix_for_template(llineup)
    return pif.render.format_template('simplematrix.html', llineup=llineup)
Пример #4
0
def single_box_type(pif):
    pif.render.set_page_extra(pif.render.image_selector_js)
    if pif.form.get_str('box'):
        boxes = pif.dbh.fetch_box_type(pif.form.get_str('box'))
    elif pif.form.get_str('mod'):
        boxes = pif.dbh.fetch_box_type_by_mod(pif.form.get_str('mod'),
                                              pif.form.get_str('ty'))
    if not boxes:
        raise useful.SimpleError("No matching boxes found.")
    boxes = pif.dbh.depref('box_type', boxes)
    mod = pif.dbh.fetch_casting_by_id_or_alias(boxes[0]['mod_id'])
    if mod:
        mod = mod[0]
        mod['id'] = mod['alias.id'] if mod['alias.ref_id'] else mod[
            'casting.id']

    lsection = dict(
        columns=['inf', 'pic'],
        headers={
            'inf': 'Box Information',
            'pic': 'Box Picture'
        },
        range=[dict(entry=[single_box(pif, mod, x) for x in boxes], note='')],
        note='')
    llistix = dict(section=[lsection])
    return llistix
Пример #5
0
def mack_lineup(pif):
    pif.render.set_button_comment(pif, 'rg=%s&sec=%s&start=%s&end=%s' % (pif.form.get_str('region', ''), pif.form.get_str('sect', ''), pif.form.get_str('start', ''), pif.form.get_str('end', '')))
    pif.render.hierarchy_append('/', 'Home')
    pif.render.hierarchy_append('/database.php', 'Database')
    pif.render.hierarchy_append(pif.request_uri, 'Mack Numbers')
    pif.render.print_html()

    series = ['RW', 'SF'] if pif.form.get_str('sect', 'all') == 'all' else [pif.form.get_str('sect').upper()]
    range = pif.form.get_str('range', 'all')
    start = 1 if range == 'all' else pif.form.get_int('start', 1)
    end = config.MAX_MACK_NUMBER if range == 'all' else pif.form.get_int('end', config.MAX_MACK_NUMBER)

    mods = mack_models(pif, start, end, series)

    if not mods:
        note = 'Your request produced no models.'
        if start > config.MAX_MACK_NUMBER:
            note += '  Be sure to use numbers from 1 to %d.' % config.MAX_MACK_NUMBER
        if start > end:
            note += "  Use a start number that isn't higher than the end number."
	raise useful.SimpleError(note)

    #mods.sort(key=lambda x: (x['mack_id_unf'][1], x['mack_id_unf'][0], x['mack_id_unf'][2]))

    lsec = pif.dbh.fetch_sections({'page_id': pif.page_id})[0]
    lsec['range'] = [{'entry': mods}]
    llineup = {'section': [lsec]}
    pif.render.format_matrix_for_template(llineup)
    return pif.render.format_template('mack.html', llineup=llineup)
Пример #6
0
 def read(self):
     self.tail['stat'] = time.strftime('Last updated %A, %d %B %Y at %I:%M:%S %p %Z.',
                                       time.localtime(self.srcstat.st_mtime))
     try:
         return self.read_file(self.handle)
     except IOError:
         raise useful.SimpleError(
             """I'm sorry, that page was not found.  Please use your "BACK" button or try something else.""")
Пример #7
0
def profile_main(pif):
    pif.render.title = 'User Profile'
    pif.render.hide_title = False
    pif.render.print_html()

    if not pif.user_id:
        raise useful.SimpleError("It doesn't look like you're logged in!")
    table_info = pif.dbh.table_info['user']
    user = pif.user
    if not user:
        raise useful.SimpleError('That user record ({}) was not found.'.format(pif.user_id))
    if 'user_id' in pif.form:
        newuser = pif.dbh.fetch_user(user_id=pif.form.get_str('user_id'))
        if newuser and newuser.id != pif.form.get_int('id'):
            raise useful.SimpleError('Sorry, but that user ID is already in use.')
        if pif.dbh.update_profile(user, **pif.form.form):
            useful.warn('Your profile has been updated.')
        else:
            useful.warn('Updating your profile failed.')
    # if email changed, clear verified

    header = pif.render.format_form_start(method='post', token=pif.dbh.create_token())
    rows = table_info['editable']
    desc = pif.dbh.describe_dict('user')

    def prof_row(row):
        return {'title': table_info['title'][row], 'value': pif.render.format_text_input(
            row, desc[row]['length'], 80, value=user[row]) + (
            '<br>If you change your email address, you will have to verify the new one.' if row == 'email' else '')}

    entries = [prof_row(row) for row in rows]
    if user['flags'] & config.FLAG_USER_BAMCA_MEMBER:
        entries[0]['value'] += ' ' + pif.render.fmt_art('bamca_member')
    footer = pif.render.format_hidden_input({'id': user['id']})
    footer += pif.render.format_button_input() + "</form>"
    footer += pif.render.format_button('change password', '/cgi-bin/chpass.cgi')
    if user['photographer_id']:
        footer += pif.render.format_button(
            'your pictures', '/cgi-bin/photogs.cgi?id={}'.format(user['photographer_id']))
    lsection = dict(columns=['title', 'value'], range=[{'entry': entries}], note='',
                    noheaders=True, header=header, footer=footer)
    return pif.render.format_template(
        'simplelistix.html',
        header=('''<br>Currently this information is only available to administrators of this website.  We're '''
                '''looking at possibly doing more in the future though.<br><br>'''),
        llineup=dict(section=[lsection]), nofooter=True)
Пример #8
0
    def __init__(self, page_id, form_key='', defval='', args='', dbedit=None):
        self.render = self.dbh = None
        self.secure = secure.Security()
        self.htdocs = self.secure.docroot
        config.IS_BETA = self.secure.is_beta
        self.rawcookies = self.secure.get_cookies()
        user_id = self.rawcookies.get('id', '0')
	if isinstance(user_id, str):
	    user_id = eval(user_id)
	if isinstance(user_id, (int, long)):
	    self.id = user_id
	elif isinstance(user_id, tuple):
	    user_id = user_id[0]
	config.USER_ID = self.user_id = user_id
        self.unittest = bool(args)  # args comes from unittest only!
        self.argv = args.split() if args else sys.argv[1:]  # argv comes from command line only!
        self.form = BaseForm(cgi.FieldStorage(), self.argv)
        self.page_id = self.get_page_id(page_id, form_key, defval)
        self.page_name = self.page_id[self.page_id.rfind('.') + 1:]
        self.time_start = datetime.datetime.now().strftime('%Y%m%d.%H%M%S')
        self.request_uri = os.environ.get('REQUEST_URI', 'unknown')
        self.remote_host = os.environ.get('REMOTE_HOST', 'host_unset')
        self.remote_addr = os.environ.get('REMOTE_ADDR', '127.0.0.1')
        self.is_web = 'REQUEST_METHOD' in os.environ  # is apache!
        self.set_server_env()
	self.log = logger.Logger()
        self.format_type = 'python'
        self.render = render.Presentation(self.page_id, self.form.get_int('verbose'))
        self.render.secure = self.secure
        self.render.unittest = self.unittest
        self.render.comment('form', self.form.get_form())
        self.privs = set(self.rawcookies.get('pr', '')) & set(self.form.get_str('privs', 'vuma'))
        self.secure.cookies = self.rawcookies.get('co')
        if self.is_allowed(dbedit):
            self.secure.set_config('edit')

        os.chdir(self.secure.docroot)
        self.cwd = os.getcwd()
        self.render.is_beta = self.secure.is_beta
        self.cgibin = '../cgi-bin'

        self.dbh = dbhand.DBHandler(self.secure.config, self.user_id, self.log.dbq, self.render.verbose)
        self.dbh.dbi.nowrites = self.unittest
        self.log_start()
        page_info = self.dbh.fetch_page(self.page_id)
	if not page_info:
	    raise useful.SimpleError('Your request is incorrect (bad page id, %s).  Please try something else.' % self.page_id)
        self.render.set_page_info(page_info)
        self.render.not_released = (self.render.flags & self.dbh.FLAG_PAGE_INFO_HIDDEN) != 0
        self.render.hide_title = (self.render.flags & self.dbh.FLAG_PAGE_INFO_HIDE_TITLE) != 0
	self.render.is_admin = self.is_allowed('a')
	self.render.is_moderator = self.is_allowed('m')
	self.render.is_user = self.is_allowed('u')
	self.render.is_viewer = self.is_allowed('v')
        if not self.is_web:
	    useful.header_done(is_web=False)
	self.duplicate_form = self.form.has('token') and not self.dbh.insert_token(self.form.get_str('token'))
Пример #9
0
def show_dir(pif, tform):
    if not os.path.exists(tform.tdir):
        raise useful.SimpleError('Path does not exist.')

    ostr = '<hr>\n'
    #dl, gl, ol, sl, xl = imglib.get_dir(tform.tdir)
    files = imglib.get_dir(tform.tdir, name_has=tform.has)

    ostr += show_list(files['titles']['dir'], tform.tdir, files['dir'], tform.view)

    if files['graf']:
        if tform.graf:
            ostr += '<h4>%s (%d)</h4><div class="glist">\n' % (files['titles']['graf'], len(files['graf']))
            for f in files['graf']:
                perms = os.stat(tform.tdir + '/' + f)[stat.ST_MODE]
                if (perms & 4) == 0:
                    ostr += '%s<br>\n' % f
                elif tform.graf:
                    #ostr += '<a href="/cgi-bin/traverse.cgi?d=%s&f=%s"><img src="../%s" border=0>%s</a><br>' % (tform.tdir, f, tform.tdir + '/' + f, f)
                    ostr += '<a href="imawidget.cgi?d=%s&f=%s&man=%s&newvar=%s&cy=0&suff=%s"><img src="../%s" border=0>%s</a><br>\n' % (tform.tdir, f, tform.mod, tform.var, tform.suff, tform.tdir + '/' + f, f)
                else:
                    ostr += '<a href="../%s">%s</a><br>\n' % (tform.tdir + '/' + f, f)
            ostr += '</div><hr>\n'
        else:
            ostr += show_list(files['titles']['graf'], tform.tdir, files['graf'], tform.view)

    ostr += show_list(files['titles']['log'], tform.tdir, files['log'], tform.view)
    ostr += show_list(files['titles']['dat'], tform.tdir, files['dat'], tform.view)
    ostr += show_list(files['titles']['exe'], tform.tdir, files['exe'], tform.view)
    ostr += show_list(files['titles']['other'], tform.tdir, files['other'], tform.view)

    if pif.render.is_admin:
	ostr += '<a href="upload.cgi?d=%s">%s</a>\n' % (tform.tdir, pif.render.format_button('upload'))

    if files['graf']:
        ostr += '<form action="traverse.cgi">\n' + pif.create_token()
        ostr += '<a href="traverse.cgi?g=1&d=%s">%s</a> or \n' % (tform.tdir, pif.render.format_button('show all pictures'))
        ostr += 'Pattern <input type="text" name="p">\n'
        ostr += '<input type="hidden" name="d" value="%s">\n' % tform.tdir
        ostr += '<input type="checkbox" name="du" value="1"> Dupes\n'
        ostr += '<input type="checkbox" name="co" value="1"> Compact\n'
        ostr += '<input type="checkbox" name="si" value="1"> Sized\n'
	if pif.render.is_admin:
	    ostr += '<br><input type="radio" name="lty" value="nrm" checked> Normal\n'
	    ostr += '<input type="radio" name="lty" value="shc"> Categorize\n'
	    ostr += '<input type="radio" name="lty" value="mss"> VMass\n'
	    ostr += '<input type="radio" name="lty" value="pms"> PMass\n'
	    ostr += '<input type="radio" name="lty" value="shm"> Shelve\n'
	    ostr += '<input type="radio" name="lty" value="suf"> Resuffix\n'
	    ostr += '<input type="radio" name="lty" value="crd"> Credit\n'
        ostr += pif.render.format_button_input()
	ostr += '<br>\n'
        ostr += 'Size X <input type="text" name="sx">\n'
        ostr += 'Size Y <input type="text" name="sy">\n'
        ostr += '</form>\n'
    return ostr
Пример #10
0
 def __init__(self, fname):
     if fname.startswith('/'):
         fname = fname[1:]
     self.filename = fname
     useful.write_comment('trying to open', fname)
     self.set_globals()
     try:
         self.handle = open(fname)
     except IOError:
         raise useful.SimpleError(
             """I'm sorry, that page was not found.  Please use your "BACK" button or try something else.""")
     self.srcstat = os.fstat(self.handle.fileno())
     self.ignoreoverride = False
     self.dats = {}
     self.parse()
Пример #11
0
def get_size(fn):
    try:
        l = pipe_chain(open(fn),
                       import_file(fn) + [["/usr/local/bin/pamfile"]],
                       subprocess.PIPE,
                       verbose=False)
    except IOError:
        raise useful.SimpleError('Could not read ' + fn)
    f = l.split()
    try:
        x = int(f[3])
        y = int(f[5])
    except:
        x = y = 0
    return (x, y)
Пример #12
0
def create(pif):
    # os.environ['PYTHON_EGG_CACHE'] = '/var/tmp'
    user_id = pif.form.get_str('user_id')
    p1 = pif.form.get_str('p')
    p2 = pif.form.get_str('p2')
    email = pif.form.get_str('email')
    if not user_id or (set(user_id) - set(string.ascii_letters + string.digits + '._')):
        raise useful.SimpleError('That is not a legal user ID.')
    if pif.dbh.fetch_user(user_id=user_id):
        raise useful.SimpleError('That ID is already in use.')
    if not email:
        raise useful.SimpleError('Please specify an email address.')
    if not p1 or p1 != p2:
        raise useful.SimpleError('Please specify the same password in both password boxes.')

    vkey = useful.generate_token(10)
    rec_id = pif.dbh.create_user(passwd=p1, vkey=vkey, privs='b', **pif.form.form)
    if rec_id:
        user = pif.dbh.fetch_user(id=rec_id)
        generate_signup_email(pif, user)
        useful.warn("Your account has been created.  Please check your email for the verification.")
        raise useful.Redirect("/cgi-bin/validate.cgi")

    return pif.render.format_template('signup.html', dest=pif.form.get_str('dest'))
Пример #13
0
def mack_lineup(pif):
    pif.render.set_button_comment(
        pif,
        'rg={}&sec={}&start={}&end={}'.format(pif.form.get_str('region', ''),
                                              pif.form.get_str('sect', ''),
                                              pif.form.get_str('start', ''),
                                              pif.form.get_str('end', '')))
    pif.render.hierarchy_append('/', 'Home')
    pif.render.hierarchy_append('/database.php', 'Database')
    pif.render.hierarchy_append(pif.request_uri, 'Mack Numbers')
    pif.render.print_html()

    series = ['RW', 'SF'] if pif.form.get_str(
        'sect', 'all') == 'all' else [pif.form.get_str('sect').upper()]
    range = pif.form.get_str('range', 'all')
    start = 1 if range == 'all' else pif.form.get_int('start', 1)
    end = config.MAX_MACK_NUMBER if range == 'all' else pif.form.get_int(
        'end', config.MAX_MACK_NUMBER)
    text_list = pif.form.get_str('text', 'pic') == 'txt'

    amods = mack_models(pif, start, end, series)
    ranges = format_mack_text(pif, amods) if text_list else format_mack_html(
        pif, amods)

    if not ranges:
        note = 'Your request produced no models.'
        if start > config.MAX_MACK_NUMBER:
            note += '  Be sure to use numbers from 1 to {}.'.format(
                config.MAX_MACK_NUMBER)
        if start > end:
            note += "  Use a start number that isn't higher than the end number."
        raise useful.SimpleError(note)

    lsec = pif.dbh.fetch_sections({'page_id': pif.page_id})[0]
    lsec['range'] = ranges
    llineup = {'section': [lsec]}
    if text_list:
        lsec['headers'] = {
            'id': 'Mack ID',
            'man': 'MAN ID',
            'name': 'Name',
            'year': 'Year',
            'error': ''
        }
        lsec['columns'] = ['id', 'man', 'name', 'year', 'error']
        return pif.render.format_template('simplelistix.html', llineup=llineup)
    pif.render.format_matrix_for_template(llineup)
    return pif.render.format_template('mack.html', llineup=llineup)
Пример #14
0
def get_size(fn):
    try:
        p = useful.pipe_chain(open_input_file(fn),
                              import_file(fn) + [["/usr/local/bin/pamfile"]],
                              stderr=subprocess.PIPE,
                              verbose=False)
    except IOError:
        raise useful.SimpleError('Could not read ' + fn)
    # print('get_size', p)
    f = p.split()
    try:
        x = int(f[3])
        y = int(f[5])
    except Exception:
        x = y = 0
    return (x, y)
Пример #15
0
 def set_page_info(self, page_id):
     page_info = self.dbh.fetch_page(page_id)
     if not page_info:
         raise useful.SimpleError(
             'Your request is incorrect (bad page id, %s).  Please try something else.'
             % self.page_id,
             status=404)
     self.render.set_page_info(page_info)
     if self.render.flags & config.FLAG_PAGE_INFO_ADMIN_ONLY:
         self.restrict('a')
     if config.LOCKDOWN and not (self.render.flags
                                 & config.FLAG_PAGE_INFO_PUBLIC):
         self.restrict('b')
     self.render.not_released = (self.render.flags
                                 & config.FLAG_PAGE_INFO_HIDDEN) != 0
     self.render.hide_title = (self.render.flags
                               & config.FLAG_PAGE_INFO_HIDE_TITLE) != 0
Пример #16
0
def add_page(pif):
    pif.render.print_html()
    pif.render.set_page_extra(pif.render.reset_button_js)

    rejected, blacklist = read_blacklist(pif)
    for ent in blacklist:
        if pif.remote_addr == ent:
            raise useful.SimpleError(
                "You have been banned from using this service because of previous abuses.  "
                "If you have a problem with this, contact us via email, but don't hope for much.")

    listCats, listIndices, dictCats, listRejectCats = read_config(pif)

    lnk = add_new_link(pif, dictCats, rejected) if pif.form.get_str('url') else ''

    context = {
        'categories': listCats,
        'countries': mbdata.countries,
        'link': lnk,
    }
    return pif.render.format_template('tlinkadd.html', **context)
Пример #17
0
def do_prod_masses(pif, tform):
    ddir = tform.tdir.replace('lib', 'pic')
    print(pif.form.get_str('credit'), ddir, '<br>')
    if not os.path.exists(ddir):
        raise useful.SimpleError('Path does not exist.')
    siz = pif.form.get('tysz')
    cred = pif.form.get_str('credit')
    if cred:
        photog = pif.dbh.fetch_photographer(cred)
        if not photog:
            cred = ''
    for fn, nam in pif.form.get_list(start='nam.'):
        print('<hr>')
        print(fn, ddir, siz, nam, '<br>')

        rf = [False, False, False, False, False]
        pth = tform.tdir + '/' + fn
        q = (
            0,
            0,
        ) + imglib.get_size(pth)
        nname = ddir + '/' + siz + '_' + nam + '.jpg'
        ts = (400, 0)
        ofi = imglib.shrinker(pth, nname, q, ts, rf)
        imglib.simple_save(ofi, nname)
        images.file_log(nname, tform.tdir)
        url = pif.secure_prod + nname[1:]
        link = pif.secure_prod
        title = nam
        if cred and not photog.flags & config.FLAG_PHOTOGRAPHER_PRIVATE:
            title += ' credited to ' + photog.name
        pif.render.message(
            'Post to Tumblr: ',
            tumblr.Tumblr(pif).create_photo(caption=title,
                                            source=url,
                                            link=link))
        pif.render.message('Credit added: ',
                           pif.dbh.write_photo_credit(cred, ddir, nam))
Пример #18
0
def update_user(pif):
    newuser = pif.dbh.fetch_user(user_id=pif.form.get_str('user_id'))
    if newuser and newuser.id != pif.form.get_int('id'):
        raise useful.SimpleError('The requested user ID is already in use.')
    pif.form.set_val('flags', pif.form.get_bits('flags'))
    pif.dbh.update_user(pif.form.get_int('id'), **pif.form.get_dict(keylist=pif.dbh.table_info['user']['columns']))
Пример #19
0
def publication(pif):
    pif.render.print_html()
    pub_id = pif.form.get_str('id')

    man = pif.dbh.fetch_publication(pub_id)
    if not man:
        raise useful.SimpleError("That publication was not found.")
    man = man[0]
    man['casting_type'] = 'Publication'
    man['name'] = man['base_id.rawname'].replace(';', ' ')
    imgs = pub_images(pif, pub_id)

    left_bar_content = ''
    if pif.is_allowed('a'):  # pragma: no cover
        left_bar_content += '<p><b><a href="%s">Base ID</a><br>\n' % pif.dbh.get_editor_link(
            'base_id', {'id': pub_id})
        left_bar_content += '<a href="%s">Publication</a><br>\n' % pif.dbh.get_editor_link(
            'publication', {'id': pub_id})
        left_bar_content += '<a href="traverse.cgi?d=.%s">Library</a><br>\n' % config.IMG_DIR_CAT
        left_bar_content += '<a href="upload.cgi?d=.%s&n=%s&c=%s">Product Upload</a><br>\n' % (
            config.IMG_DIR_CAT, pub_id, pub_id)

    upper_box = ''
    if imgs:
        upper_box += pif.render.format_image_link_image(
            imgs[0], link_largest=mbdata.IMG_SIZ_LARGE)
    else:
        upper_box += pif.render.format_image_link_image(
            img, link_largest=mbdata.IMG_SIZ_LARGE)
    if man['base_id.description']:
        upper_box += '<br>' if upper_box else ''
        upper_box += man['base_id.description']

    lran = {
        'id':
        'ran',
        'entry':
        [{
            'text': pif.render.format_image_link_image(img[img.rfind('/') +
                                                           1:])
        } for img in sorted(imgs)] if imgs else [{
            'text':
            pif.render.format_image_link_image(pub_id)
        }]
    }
    llineup = {
        'id': pub_id,
        'name': '',
        'section': [{
            'id': 'sec',
            'range': [lran],
            'columns': 4
        }],
        'columns': 4
    }

    pif.render.set_button_comment(pif, 'id=%s' % pub_id)
    pif.render.format_matrix_for_template(llineup)
    context = {
        'title': man.get('name', ''),
        'note': '',
        'type_id': '',
        #'icon_id': pub_id,
        'vehicle_type': '',
        'rowspan': 5 if upper_box else 4,
        'left_bar_content': left_bar_content,
        'upper_box': upper_box,
        'llineup': llineup,
    }
    return pif.render.format_template('pub.html', **context)
Пример #20
0
def publication_list(pif, mtype):
    sec = get_section_by_model_type(pif, mtype)
    if not sec:
        raise useful.SimpleError("That publication type was not found.")
    if sec.id == 'ads':
        raise useful.Redirect('ads.cgi?title=' + pif.form.get_str('title'))
    sobj = pif.form.search('title')
    pif.render.pic_dir = sec.page_info.pic_dir
    pubs = pif.dbh.fetch_publications(model_type=mtype)

    def pub_ent(pub):
        ret = pub.todict()
        ret.update(ret['base_id'])
        if not useful.search_match(sobj, ret['rawname']):
            return None
        ret['name'] = '<a href="pub.cgi?id=%s">%s</a>' % (
            ret['id'], ret['rawname'].replace(';', ' '))
        ret['description'] = useful.printablize(ret['description'])
        if (os.path.exists(
                os.path.join(pif.render.pic_dir, ret['id'].lower() + '.jpg'))
                or glob.glob(
                    os.path.join(pif.render.pic_dir,
                                 '?_' + ret['id'].lower() + '_*.jpg'))
                or glob.glob(
                    os.path.join(pif.render.pic_dir,
                                 '?_' + ret['id'].lower() + '.jpg'))):
            ret['picture'] = mbdata.comment_icon['c']
        return ret

    if 1:
        entry = [pub_ent(pub) for pub in pubs]
        hdrs = {
            'description': 'Description',
            'first_year': 'Year',
            'country': 'Country',
            'flags': 'Flags',
            'model_type': 'Type',
            'id': 'ID',
            'name': 'Name',
            'picture': ''
        }
        cols = ['picture', 'name', 'description', 'first_year', 'country']

        lrange = dict(entry=[x for x in entry if x],
                      styles=dict(zip(cols, cols)))
        lsection = dict(columns=cols,
                        headers=hdrs,
                        range=[lrange],
                        note='',
                        name=sec.name)
        llistix = dict(section=[lsection])
        return pif.render.format_template('simplelistix.html', llineup=llistix)

    cols = 4

    def pub_text_link(pub):
        pic = pif.render.fmt_img(pub['id'], prefix='s')
        name = pic + '<br>' + pub['name'] if pic else pub['name']
        return {
            'text': pif.render.format_link("makes.cgi?make=" + pub['id'], name)
        }

    ents = [pub_text_link(pub_ent(x)) for x in pubs]
    llineup = {
        'id':
        '',
        'name':
        '',
        'columns':
        cols,
        'header':
        '',
        'footer':
        '',
        'section': [{
            'columns': cols,
            'range': [{
                'entry': ents,
                'id': 'makelist'
            }]
        }]
    }

    pif.render.format_matrix_for_template(llineup)
    return pif.render.format_template('simplematrix.html', llineup=llineup)
Пример #21
0
def show_single(pif):
    model = pif.dbh.fetch_casting(pif.form.get_id('id'),
                                  extras=True,
                                  verbose=True)
    if not model:
        raise useful.SimpleError("That ID wasn't found.")
    pif.render.print_html(status=404 if not model else 200)
    useful.write_comment('model', model)
    pic = pif.form.get_str('pic')
    pdir = pif.form.get_str('dir')
    if pdir.startswith('./'):
        pdir = pdir[2:]
    if not pdir.startswith('pic/') or '/' in pic:
        pdir = pic = ''
    ref = pif.form.get_id('ref')
    sub = pif.form.get_str('sub')
    reg = sub if sub else pic[4] if (
        ref.startswith('year') and pic and len(pic) > 4
        and pic[:4].isdigit()) else ''
    mod_id = model['id']
    pif.render.hierarchy_append('/', 'Home')
    pif.render.hierarchy_append('/database.php', 'Database')
    pif.render.hierarchy_append('/cgi-bin/single.cgi', 'By ID')
    pif.render.hierarchy_append('/cgi-bin/single.cgi?id=%s' % mod_id, mod_id)

    pif.render.comment('id=', mod_id, 'man=', model)
    raw_variations = variations = []
    if ref:
        sub = mbdata.get_region_tree(reg) + ['']
        raw_variations = pif.dbh.fetch_variation_by_select(mod_id, ref, sub)
        variations = reduce_variations(pif, mod_id, raw_variations)
    # years 1971 to 1981 needs to cleave W to U and R
    appearances = list()
    for appear in pif.dbh.depref('lineup_model',
                                 pif.dbh.fetch_casting_lineups(mod_id)):
        if (appear.get('region', '') == 'W'
                and int(appear.get('year', 0)) >= 1971
                and int(appear.get('year', 0)) <= 1981):
            nappear = copy.deepcopy(appear)
            nappear['region'] = 'U'
            appear['region'] = 'R'
            appearances.append(nappear)
        appearances.append(appear)
    lm_pic_id = ''
    prod_title = ''
    if ref.startswith('year.'):
        for appear in appearances:
            if appear.get('page_id', '-') == ref and (appear.get(
                    'region', '-') in sub or sub == ['']):
                prod_title = appear['name']
                lm_pic_id = appear['picture_id']
                break
        if pif.form.has('useprev'):  # pragma: no cover
            pic = use_previous_product_pic(pif, pif.form.get_int('useprev'),
                                           appear)

    appearances.sort(key=lambda x: x['year'])
    aliases = [x['alias.id'] for x in pif.dbh.fetch_aliases(mod_id, 'mack')]

    matrixes = pif.dbh.fetch_matrix_appearances(mod_id)
    matrixes.sort(key=lambda x: x['page_info.description'] + x['section.name'])
    for appear in matrixes:
        appear['title'] = [appear['section.name'], appear['page_info.description']] if appear['page_info.flags'] & 2 \
            else [appear['page_info.title'], appear['page_info.description'], appear['section.name']]

    sections_recs = pif.dbh.fetch_sections(where="page_id like 'year.%'")
    sections = {}
    for section in sections_recs:
        if section['columns'] and not section['display_order']:
            sections.setdefault(section['page_id'][5:], [])
            sections[section['page_id'][5:]].append(section)

    boxstyles = pif.dbh.fetch_box_type_by_mod(model['id'])

    pif.render.title = '%(casting_type)s %(id)s: %(name)s' % model
    product_img = pif.render.format_image_sized(pic,
                                                pdir=pdir,
                                                largest=mbdata.IMG_SIZ_MEDIUM)
    product_img_credit = pif.dbh.fetch_photo_credit(pdir, pic, verbose=True)
    product_img_credit = product_img_credit[
        'photographer.name'] if product_img_credit else ''
    if product_img and pif.is_allowed('a'):  # pragma: no cover
        img = img_re.search(product_img).group('u')
        url = 'imawidget.cgi?d=%s&f=%s' % tuple(img[3:].rsplit('/', 1))
        product_img = pif.render.format_link(url, product_img)

    vscounts = pif.dbh.fetch_variation_select_counts(mod_id)

    model['imgid'] = [model['id']]
    descs = []
    for s in model['descs']:
        if s.startswith('same as '):
            model['imgid'].append(s[8:])
        if s in mbdata.arts:
            descs.append(pif.render.format_image_art(mbdata.arts[s]))
        elif s:
            descs.append("<i>%s</i>" % s)
    model['descs'] = descs
    model['img'] = pif.render.format_image_required(
        model['imgid'],
        made=model['made'],
        pdir=config.IMG_DIR_MAN,
        largest=mbdata.IMG_SIZ_MEDIUM if product_img else mbdata.IMG_SIZ_LARGE)
    model_img_credit = pif.dbh.fetch_photo_credit('.' + config.IMG_DIR_MAN,
                                                  model['imgid'][0],
                                                  verbose=True)
    model['credit'] = model_img_credit[
        'photographer.name'] if model_img_credit else ''
    if model['country']:
        model['country_flag'] = pif.render.format_image_flag(model['country'])
        model['country_name'] = mflags.FlagList()[model['country']]

    def make_make_link(make, name):
        if not make:
            return ''
        if not name:
            name = 'unlicensed'
        pic = pif.render.fmt_img(make, prefix='u', pdir=config.IMG_DIR_MAKE)
        if pic:
            name = pic + '<br>' + name
        return pif.render.format_link("makes.cgi?make=" + make, name)

    model['make_name'] = make_make_link(model.get('make', ''),
                                        model.get('vehicle_make.name', ''))

    def make_make(make):
        return {
            'image':
            pif.render.fmt_img(make['vehicle_make.id'],
                               prefix='u',
                               pdir=config.IMG_DIR_MAKE),
            'id':
            make['vehicle_make.id'],
            'name':
            make['vehicle_make.name'],
            'company_name':
            make['vehicle_make.company_name'],
            'flags':
            make['vehicle_make.flags'] | make['casting_make.flags'],
            'link':
            'makes.cgi?make=%s' % make['vehicle_make.id'],
        }

    model['makes'] = [
        make_make(x) for x in pif.dbh.fetch_casting_makes(mod_id)
    ]
    adds = [make_boxes(pif, mod_id, boxstyles, aliases)] if boxstyles else []
    adds += models.make_adds(pif, mod_id)

    plants = make_plants(pif, mod_id,
                         pif.dbh.fetch_variation_plant_counts(mod_id))

    # ------- render ------------------------------------

    pif.render.set_button_comment(
        pif, 'id=%s&pic=%s&dir=%s&ref=%s' % (mod_id, pic, pdir, ref))
    context = {
        'title':
        '%s %s: %s' %
        (mbdata.model_types[model['model_type']], mod_id, model['name']),
        'note':
        '',
        'type_id':
        '',
        'icon_id':
        mod_id if os.path.exists(
            useful.relpath('.', config.IMG_DIR_ICON, 'i_' + mod_id.lower() +
                           '.gif')) else '',
        'vehicle_type':
        [mbdata.model_icons.get(x) for x in model['vehicle_type']],
        'rowspan':
        '4',
        'left_bar_content':
        show_left_bar_content(pif, model, ref, pic, pdir, lm_pic_id,
                              raw_variations),
        'model':
        model,
        'variations':
        variations,
        'prod_title':
        prod_title,
        'product_image':
        product_img,
        'product_img_credit':
        product_img_credit,
        'mack_nums':
        get_mack_numbers(pif, mod_id, model['model_type'], aliases),
        'product_pic':
        pic,
        'appearances':
        show_lineup_appearances(pif, appearances),
        'matrixes':
        show_series_appearances(pif, matrixes),
        'code2s':
        show_code2_appearances(pif, mod_id, vscounts),
        'packs':
        show_pack_appearances(
            pif,
            sorted(pif.dbh.fetch_pack_model_appearances(mod_id),
                   key=lambda x: x['base_id.first_year'])),
        'show_comparison_link':
        pif.dbh.fetch_casting_related_exists(mod_id,
                                             model['model_type'].lower()),
        'external_links':
        show_external_links(pif,
                            pif.dbh.fetch_links_single('single.' + mod_id)),
        'relateds':
        make_relateds(pif, mod_id),
        'compares':
        make_compares(pif, mod_id),
        'adds_box':
        models.show_adds(pif, mod_id),
        'adds':
        adds,
        'plants':
        plants,
        #	'group': pif.render.find_image_path(mod_id, prefix='g', pdir=config.IMG_DIR_ADD)
    }
    return pif.render.format_template('single.html', **context)
Пример #22
0
def single_publication(pif, pub_id):
    man = pif.dbh.fetch_publication(pub_id).first
    if not man:
        raise useful.SimpleError("That publication was not found.")
    pif.render.pic_dir = picdirs.get(man.base_id.model_type,
                                     pif.render.pic_dir)
    # should just use man.section_id
    sec = get_section_by_model_type(pif, man.base_id.model_type)
    # pif.set_page_info(sec.page_info.id)  # obviously not right but I don't know what is.
    man['casting_type'] = 'Publication'
    man['name'] = man['base_id.rawname'].replace(';', ' ')
    imgs = pub_images(pif, pub_id.lower())
    relateds = make_relateds(
        pif,
        'pub.' + mbdata.model_type_names[man['base_id.model_type']].lower(),
        pub_id, imgs)

    left_bar_content = ''
    if pif.is_allowed('a'):  # pragma: no cover
        left_bar_content += '<p><b><a href="%s">Base ID</a><br>\n' % pif.dbh.get_editor_link(
            'base_id', {'id': pub_id})
        left_bar_content += '<a href="%s">Publication</a><br>\n' % pif.dbh.get_editor_link(
            'publication', {'id': pub_id})
        left_bar_content += '<a href="traverse.cgi?d=%s">Library</a><br>\n' % pif.render.pic_dir.replace(
            'pic', 'lib')
        left_bar_content += '<a href="upload.cgi?d=%s&n=%s&c=%s">Product Upload</a><br>\n' % (
            pif.render.pic_dir.replace('pic', 'lib'), pub_id, pub_id)

    upper_box = ''
    if imgs:
        upper_box += pif.render.format_image_link_image(
            imgs[0], link_largest=mbdata.IMG_SIZ_LARGE)
    # else:
    #     upper_box += pif.render.format_image_link_image(img, link_largest=mbdata.IMG_SIZ_LARGE)
    if man['base_id.description']:
        upper_box += '<br>' if upper_box else ''
        upper_box += useful.printablize(man['base_id.description'])

    lran = [{
        'id':
        'ran',
        'entry':
        [{
            'text': pif.render.format_image_link_image(img[img.rfind('/') +
                                                           1:])
        } for img in sorted(imgs)] if imgs else [{
            'text':
            pif.render.format_image_link_image(pub_id)
        }]
    } if len(imgs) > 1 else {}]
    if relateds:
        lran.append({
            'id': 'related',
            'entry': relateds,
            'name': 'Related Models'
        })
    llineup = {
        'id': pub_id,
        'name': '',
        'section': [{
            'id': 'sec',
            'range': lran,
            'columns': 4
        }],
        'columns': 4
    }

    pif.render.set_button_comment(pif, 'id=%s' % pub_id)
    pif.render.format_matrix_for_template(llineup)
    context = {
        'title': man.get('name', ''),
        'note': '',
        'type_id': 'p_' + sec.id,
        # 'icon_id': pub_id,
        'vehicle_type': '',
        'rowspan': 5 if upper_box else 4,
        'left_bar_content': left_bar_content,
        'upper_box': upper_box,
        'llineup': llineup,
    }
    return pif.render.format_template('pub.html', **context)
Пример #23
0
def do_single_pack(pif, format_type, pid):
    pack = dict()
    packs = pif.dbh.fetch_pack(pid)
    if not packs:
        raise useful.SimpleError(
            "That %s doesn't seem to exist." %
            ('pack' if format_type == 'packs' else 'playset'))
    pif.render.hierarchy_append('',
                                packs[0]['base_id.rawname'].replace(';', ' '))
    pif.render.print_html()

    llineup = dict(section=[], tail=[''], id='')
    for pack in packs:
        pack_id = pack['pack.id']
        pack['longid'] = pack_id + ('-' + pack['pack.var']
                                    if pack['pack.var'] else '')
        db_relateds = pif.dbh.fetch_packs_related(pack_id)
        relateds = [{
            'link':
            pif.render.format_link(
                "?page=" + pif.form.get_str('page') + "&id=" + r['pack.id'],
                r['base_id.rawname'].replace(';', ' ')),
            'product_code':
            r['pack.product_code'],
            'region':
            mbdata.regions.get(r['pack.region'], ''),
            'country':
            mbdata.get_country(r['pack.country']),
            'material':
            mbdata.materials.get(r['pack.material'], ''),
            'description':
            r['base_id.description'],
        } for r in db_relateds]

        tcomments = set()
        pack.update({key[key.find('.') + 1:]: pack[key] for key in pack})
        pack['name'] = pack['rawname'].replace(';', ' ')

        pmodels = distill_models(pif, pack, pack['page_id'])
        if pack['layout'].isdigit() and len(pack['layout']) == 4:
            layout = [int(x) for x in pack['layout'][:3]] + pack['layout'][3:]
        elif not pmodels:
            layout = pack_layouts['01s']
        else:
            layout = pack_layouts.get(pack['layout'], pack_layouts['04h'])
        if len(layout) == 2:
            layout[3] = 1
        if len(layout) == 3:
            layout[4] = 4 - (layout[0] - layout[1])

        pif.render.comment('pack:', pack)
        entries = [{
            'text': show_pack(pif, pack, layout[3]),
            'class': 'width_' + layout[3],
            'display_id': '0',
            'colspan': layout[1],
            'rowspan': layout[2]
        }]
        for mod in sorted(pmodels.keys()):
            pif.render.comment("do_single_pack mod", pmodels[mod])

            if not pmodels[mod].get('id'):
                pmodels[mod]['no_casting'] = 1
                tcomments.add('m')
            else:
                if pmodels[mod]['imgstr'].find('-') < 0:
                    tcomments.add('i')
                if not pmodels[mod].get('vs.var_id'):
                    pmodels[mod]['no_variation'] = 1
                    tcomments.add('v')

            entries.append({
                'text': show_pack_model(pif, pmodels[mod]),
                'display_id': 1
            })

        llineup['section'].append(
            dict(id='',
                 columns=layout[0],
                 anchor=pack['id'],
                 range=[{
                     'entry': entries
                 }]))

    # left bar
    left_bar_content = ''
    if pif.is_allowed('a'):  # pragma: no cover
        left_bar_content += '<br><center>'
        left_bar_content += (
            '<p><b><a href="%s">Base ID</a></b><br>\n' %
            pif.dbh.get_editor_link('base_id', {'id': pack_id}))
        left_bar_content += '<b><a href="%s">Pack</a></b><br>\n' % pif.dbh.get_editor_link(
            'pack', {'id': pack_id})
        left_bar_content += (
            '<b><a href="traverse.cgi?d=.%s">Library</a></b><br>\n' %
            pif.render.pic_dir.replace('/pic/', '/lib/'))
        left_bar_content += (
            '<b><a href="mass.cgi?verbose=1&type=pack&section_id=%s&pack=%s&num=">Edit</a></b><br>\n'
            % (packs[0]['section_id'], pack_id))
        left_bar_content += (
            '<b><a href="upload.cgi?d=./%s&n=%s">Package</a><br>\n' %
            (pif.render.pic_dir.replace('pic', 'lib'), pack_id))
        left_bar_content += (
            '<b><a href="upload.cgi?d=./%s&n=%s">Contents</a><br>\n' %
            (pif.render.pic_dir.replace('prod', 'set').replace(
                'pic', 'lib'), pack_id))
        left_bar_content += '</center>\n'

    pif.render.set_button_comment(pif, 'd=%s' % pif.form.get_str('id'))
    pif.render.format_matrix_for_template(llineup)
    context = {
        'title': packs[0]['name'],
        'note': packs[0]['note'],
        'type_id': 'p_' + packs[0]['section_id'],
        'icon_id': '',  # pack_id,
        'vehicle_type': '',
        'rowspan': 4,
        'left_bar_content': left_bar_content,
        'llineup': llineup,
        'relateds': relateds,
    }
    return pif.render.format_template('pack.html', **context)
Пример #24
0
def edit_single(pif):
    listCats, listIndices, dictCats, listRejectCats = read_config(pif, True)
    listCats.append(('single', 'single'))
    table_info = pif.dbh.table_info['link_line']
    link_id = pif.form.get_str('id')
    if pif.form.get_str('save'):
        all_links, highest_disp_order = read_all_links(pif)
        nlink = {x: pif.form.get_str(x) for x in table_info['columns']}
        nlink['flags'] = 0
        if pif.form.get_str('section_id') == 'single':
            pass
        else:
            nlink['page_id'] = 'links.' + dictCats.get(
                pif.form.get_str('section_id', ''), pif.form.get_str('section_id', ''))
        nlink['display_order'] = highest_disp_order.get((nlink['page_id'], nlink['section_id']), 0) + 1
        for flag in pif.form.get_list('flags'):
            nlink['flags'] += int(flag, 16)
        if nlink['flags'] & config.FLAG_LINK_LINE_NOT_VERIFIABLE:
            nlink['last_status'] = 'NoVer'
        pif.dbh.update_link_line(nlink)
        pif.render.message('<br>record saved<br>')
    elif pif.form.get_str('test'):
        link = pif.dbh.fetch_link_line(link_id)[0]
        check_link(pif, link)  # don't care about blacklist here, just actual check
    elif pif.form.get_str('delete'):
        pif.dbh.delete_link_line(link_id)
        return "<br>deleted<br>"
    elif pif.form.get_str('reject'):
        nlink = {x: pif.form.get_str(x, '') for x in table_info['columns']}
        nlink['page_id'] = 'links.rejects'
        nlink['display_order'] = 1
        nlink['section_id'] = pif.form.get_str('rejects_sec')
        nlink['flags'] = 0
        pif.dbh.update_link_line(nlink)
        pif.render.message('<br>record rejected<br>')
    elif pif.form.get_str('add'):
        link_id = (
            # pif.dbh.insert_link_line(
            #     {'page_id': pif.form.get_str('page_id', ''), 'section_id': pif.form.get_str('sec')})
            # pif.form.set_val('id',
            pif.dbh.insert_link_line(
                {'page_id': pif.form.get_str('page_id'), 'country': '', 'flags': 1, 'link_type': 'l'}))

    links = pif.dbh.fetch_link_lines(where="id='%s'" % link_id)
    if not links:
        raise useful.SimpleError("That ID wasn't found.")
    link = links[0]
    asslinks = [(0, '')] + [(x['link_line.id'], x['link_line.name'])
                            for x in pif.dbh.fetch_link_lines(flags=config.FLAG_LINK_LINE_ASSOCIABLE)]
    descs = pif.dbh.describe_dict('link_line')

    header = '<form>' + pif.create_token()
    header += '<input type="hidden" name="o_id" value="%s">\n' % link['link_line.id']

    entries = []
    for col in table_info['columns']:
        col_long = 'link_line.' + col
        coltype = descs.get(col).get('type', 'unknown')
        value = useful.printablize(link.get(col_long, ''))
        entries.append({'text': col})
        # entries.append({'text': '<a href="%s">%s</a>' % (link.get(col_long, ''), link.get(col_long, ''))
        #                if col == 'url' else link[col_long]})
        entries.append({'text': '<a href="%s">%s</a>' % (value, value) if col == 'url' else value})
        if col in table_info.get('readonly', []):
            cell = '&nbsp;<input type="hidden" name="%s" value="%s">' % (col, value)
        # elif col == 'page_id':
        #     cell = '&nbsp;<input type="hidden" name="%s" value="%s">' % (col, value)
        elif col == 'section_id':
            cell = pif.render.format_select(
                'section_id', listCats, selected=value, blank='Please choose one from the list')
        elif col == 'flags':
            cell = pif.render.format_checkbox("flags", flag_check_names, useful.bit_list(link[col_long]))
        elif col == 'country':
            cell = pif.render.format_select_country('country', value)
        elif col == 'link_type':
            cell = pif.render.format_select(col, link_type_names, selected=value)
        elif col == 'associated_link':
            cell = pif.render.format_select(col, asslinks, selected=value)
        elif coltype.startswith('varchar('):
            colwidth = int(coltype[8:-1])
            cell = pif.render.format_text_input(col, colwidth, 64, value=value)
        elif coltype.startswith('int('):
            if link[col_long] is None:
                value = 0
            colwidth = int(coltype[4:-1])
            cell = pif.render.format_text_input(col, colwidth, value=value)
        else:
            cell = coltype
        entries.append({'text': cell})

    footer = ''.join([
        pif.render.format_button_input("save"),
        pif.render.format_button_input("delete"),
        pif.render.format_button_input("test"),
        pif.render.format_button_input("reject"),
        pif.render.format_select('rejects_sec', listRejectCats, blank='Please choose one from the list'),
        '</form>',
        pif.render.format_button("edit", link=pif.dbh.get_editor_link('link_line', {'id': link_id})),
    ])

    llineup = {
        'id': 'tl', 'name': 'Edit Link', 'columns': 3, 'widthauto': True,
        'section': [{'id': 's', 'name': '', 'range': [{'entry': entries}]}],
        'header': header, 'footer': footer,
    }
    pif.render.format_matrix_for_template(llineup)
    return pif.render.format_template('simplematrix.html', llineup=llineup)
Пример #25
0
    def from_cat(self, pif):
        cat_id = pif.form.get_str('cat')
        cat = pif.dbh.fetch_category(cat_id)
        if not cat:
            raise useful.SimpleError('Category not found. %s' % cat_id)
        pif.render.title = cat.name
        pif.render.hierarchy_append('/database.php#cats', 'By Categories')
        pif.render.hierarchy_append('/cgi-bin/matrix.cgi?cat=%s' % cat_id,
                                    cat.name)
        ents = pif.dbh.fetch_variations_by_category(cat_id)
        mat = { # maybe make this the section for page_id='matrix'?
        'id': 'cat',
        'page_id': 'matrix',
        'display_order': 0,
        'category': cat['category.name'],
        'flags': 0,
        'name': '',
        'columns': 4,
        'start': 0,
        'pic_dir': 'pic/prod/cat',
        'disp_format': '',
        'link_format': '',
        'img_format': '',
        'note': '',
        }
        #	ffmt = {'link': mat['link_format'], 'disp': mat['disp_format'], 'img': mat['img_format']}
        mat['text'] = ''
        mat['ents'] = {}
        range_id = 1
        pif.render.comment('matrix section:', mat)
        date_re = re.compile("^(?P<d>\d{4})")
        for ent in ents:
            ent.setdefault('vs.ref_id', '')
            ent.setdefault('vs.sub_id', '')
            date_m = date_re.search(ent['v.date'])
            if date_m:
                self.dates.add(date_m.group('d'))
            ent['id'] = ent['vs.id']
            ent['mod_id'] = ent['v.mod_id']
            ent['section_id'] = mat['id']
            ent['display_order'] = 0
            ent['page_id'] = 'matrix'
            ent['range_id'] = range_id
            ent['flags'] = 0
            ent['shown_id'] = ''
            ent['name'] = ent['base_id.rawname']
            ent['subname'] = ''
            ent['subnames'] = []
            ent['sub_id'] = ''
            ent['model_type'] = ent['base_id.model_type']
            ent.setdefault('pack.page_id', '')
            ent['description'] = []
            range_id += 1
            if ent.get('sub_id') and ent.get(
                    'vs.sub_id') and ent['sub_id'] != ent['vs.sub_id']:
                continue
            if ent.get('v.text_description'):
                ent['description'].append(ent['v.text_description'])
            ent['description'] = filter(None, ent['description'])
            ent['disp_id'] = ''
            ent['image'] = ''
            ent['link'] = ''
            ent['pdir'] = mat['pic_dir']
            if not ent['pdir']:
                ent['pdir'] = pif.render.pic_dir
            if ent['model_type'] == 'MP':
                ent['image'] = \
                 pif.render.format_image_required(ent['mod_id'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_MAN, nopad=True)
#	    elif ent['range_id'] and ffmt['img']:
#		ent['image'] = \
#			pif.render.format_image_required([useful.clean_name(ffmt['img'] % ent['range_id'], '/')])
            elif ent.get('v.picture_id'):
                ent['image'] = \
                 pif.render.format_image_required(ent['mod_id'] + '-' + ent['v.picture_id'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_VAR, nopad=True)
            elif ent.get('v.var'):
                ent['image'] = \
                 pif.render.format_image_required(ent['mod_id'] + '-' + ent['v.var'], prefix=mbdata.IMG_SIZ_SMALL, pdir=config.IMG_DIR_VAR, nopad=True)


#	    if ent['range_id'] and ffmt['disp']:
#		ent['disp_id'] = ent['range_id']
#	    if ent['range_id'] and ffmt['link']:
#		if '%' in ffmt['link']:
#		    ent['link'] = useful.clean_name(ffmt['link'] % ent['range_id'], '/')
#		else:
#		    ent['link'] = useful.clean_name(ffmt['link'], '/')
            mat['ents'].setdefault(ent['range_id'], list())
            mat['ents'][ent['range_id']].append(ent)
            ent['disp_format'] = mat['disp_format']
            pif.render.comment('        entry:', ent)
        self.tables.append(mat)
Пример #26
0
def show_file(pif, tform):
    if not os.path.exists(tform.tdir + '/' + tform.fnam):
        raise useful.SimpleError('Path does not exist.')
    print(
        pif.render.format_button('delete',
                                 link=pif.request_uri + '&delete=1&act=1'))
    if os.path.exists(os.path.join(tform.tdir, 'archive')):
        print(
            pif.render.format_button('archive',
                                     link=pif.request_uri +
                                     '&archive=1&act=1'))
    if os.path.exists(os.path.join(tform.tdir, 'fixed')):
        print(
            pif.render.format_button('fixed',
                                     link=pif.request_uri + '&fixed=1&act=1'))
    if os.path.exists(os.path.join(tform.tdir, 'spam')) or os.path.exists(
            os.path.join(tform.tdir, '..', 'spam')):
        print(
            pif.render.format_button('spam',
                                     link=pif.request_uri + '&spam=1&act=1'))
    root, ext = useful.root_ext(tform.fnam)
    if not os.path.exists(tform.tdir + '/' + tform.fnam):
        print("file not found")
    elif ext in imglib.itypes:
        # if tform.tdir.startswith('..'):
        #     print('<img src="/cgi-bin/image.cgi?d=%s&f=%s">' % (tform.tdir, tform.fnam))
        # else:
        show_picture(pif, tform.fnam)
    # elif ext == 'dat':
    #     show_table(pif, tform)
    elif tform.tdir.startswith('../../comments'):
        fil = open(tform.tdir + '/' + tform.fnam).read()
        if '{' in fil and '}' in fil:
            print(fil[:fil.index('{')])
            data = eval(fil[fil.index('{'):fil.rindex('}') + 1])
            print('<p><dl>')
            for key, val in sorted(data.items()):
                print('<dt>', key, '</dt><dd>', val, '</dd>')
            print('</dl>')
            print(fil[fil.rindex('}') + 1])
        else:
            print('<p>', fil)
    elif tform.tdir == '../../logs':
        print('<p><div style="font-family: monospace;">')
        fil = open(tform.tdir + '/' + tform.fnam).readlines()
        for i in range(len(fil)):
            if fil[i].startswith('uri = '):
                fil[i] = """uri = <a href="%s">%s</a>\n""" % (fil[i][9:-4],
                                                              fil[i][9:-4])
                break
        print('<pre>')
        print(''.join(fil))
        print('</pre>')
        print('</div>')
    else:
        print('<p>')
        fil = open(tform.tdir + '/' + tform.fnam).readlines()
        for i in range(len(fil)):
            if fil[i].startswith('uri = '):
                fil[i] = """uri = <a href="%s">%s</a>\n""" % (fil[i][9:-4],
                                                              fil[i][9:-4])
                break
        print('<br>'.join(fil))
Пример #27
0
    def from_cat(self, pif):
        cat_id = pif.form.get_str('cat')
        if not cat_id:
            return
        cat = pif.dbh.fetch_category(cat_id)
        if not cat:
            raise useful.SimpleError('Category not found. %s' % cat_id)
        pif.render.title = cat.name
        pif.render.hierarchy_append('/database.php#cats', 'By Categories')
        pif.render.hierarchy_append('/cgi-bin/matrix.cgi?cat=%s' % cat_id,
                                    cat.name)
        mat = {  # maybe make this the section for page_id='matrix'?
            'id': 'cat',
            'page_id': 'matrix',
            'display_order': 0,
            'category': cat['category.name'],
            'flags': 0,
            'name': '',
            'columns': 4,
            'start': 0,
            'pic_dir': '',
            'disp_format': '',
            'link_format': '',
            'img_format': '',
            'note': '',
        }
        mat['text'] = ''
        mat['ents'] = {}
        pif.render.comment('matrix section:', mat)
        date_re = re.compile(r"^(?P<d>\d{4})")
        vsvars = pif.dbh.fetch_variations_by_vs_category(cat_id)
        vsvars = [x for x in vsvars if x.get('vs.ref_id')
                  ] + [x for x in vsvars if not x.get('vs.ref_id')]
        for ent in vsvars:
            date_m = date_re.search(ent['v.date'])
            if date_m:
                self.dates.add(date_m.group('d'))
            ent['id'] = ent['vs.id']
            ent['mod_id'] = ent['v.mod_id']
            ent['var_id'] = ent['v.var']
            range_id = ent['mod_id'] + '-' + ent['var_id']
            ent['displayed_id'] = range_id
            ent['section_id'] = mat['id']
            ent['display_order'] = 0
            ent['page_id'] = 'matrix'
            ent['flags'] = 0
            ent['shown_id'] = ''
            ent['name'] = ent['base_id.rawname'].replace(';', ' ')
            ent['subname'] = ''
            ent['subnames'] = []
            ent['sub_id'] = ''
            ent['model_type'] = ent['base_id.model_type']
            ent.setdefault('pack.page_id', '')
            ent['description'] = []
            if ent.get('sub_id') and ent.get(
                    'vs.sec_id') and ent['sub_id'] != ent['vs.sec_id']:
                continue
            if ent.get('v.text_description'):
                ent['description'].append(ent['v.text_description'])
            ent['description'] = [x for x in ent['description'] if x]
            ent['disp_id'] = ''
            ent['image'] = ''
            ent['link'] = ''
            ent['pdir'] = mat['pic_dir']
            ent['disp_format'] = mat['disp_format']
            if not ent['pdir']:
                ent['pdir'] = pif.render.pic_dir
            if ent['model_type'] == 'MP':
                ent['image'] = pif.render.format_image_required(
                    ent['mod_id'],
                    prefix=mbdata.IMG_SIZ_SMALL,
                    pdir=config.IMG_DIR_MAN,
                    nopad=True)
            elif ent.get('v.picture_id'):
                ent['image'] = pif.render.format_image_required(
                    ent['mod_id'] + '-' + ent['v.picture_id'],
                    prefix=mbdata.IMG_SIZ_SMALL,
                    pdir=config.IMG_DIR_VAR,
                    nopad=True)
            elif ent.get('v.var'):
                ent['image'] = pif.render.format_image_required(
                    ent['mod_id'] + '-' + ent['v.var'],
                    prefix=mbdata.IMG_SIZ_SMALL,
                    pdir=config.IMG_DIR_VAR,
                    nopad=True)
            ent['range_id'] = range_id
            mat['ents'].setdefault(ent['range_id'], list())
            mat['ents'][ent['range_id']].append(ent)
            pif.render.comment('        entry:', ent)

        for ent in pif.dbh.fetch_variations_by_category(cat_id):
            ent['var_id'] = ent['var']
            range_id = ent['mod_id'] + '-' + ent['var_id']
            if range_id in mat['ents'] or cat_id not in ent['category'].split(
                    ' '):
                continue
            ent.setdefault('vs.ref_id', '')
            ent.setdefault('vs.sec_id', '')
            ent.setdefault('vs.ran_id', '')
            date_m = date_re.search(ent['date'])
            if date_m:
                self.dates.add(date_m.group('d'))
            ent['displayed_id'] = range_id
            ent['id'] = ''
            ent['section_id'] = mat['id']
            ent['display_order'] = 0
            ent['page_id'] = 'matrix'
            ent['flags'] = 0
            ent['shown_id'] = ''
            ent['name'] = ent['base_id.rawname'].replace(';', ' ')
            ent['subname'] = ''
            ent['subnames'] = []
            ent['sub_id'] = ''
            ent['model_type'] = ent['base_id.model_type']
            ent.setdefault('pack.page_id', '')
            ent['description'] = []
            if ent.get('sub_id') and ent.get(
                    'vs.sec_id') and ent['sub_id'] != ent['vs.sec_id']:
                continue
            if ent.get('text_description'):
                ent['description'].append(ent['text_description'])
            ent['description'] = [x for x in ent['description'] if x]
            ent['disp_id'] = ''
            ent['image'] = ''
            ent['link'] = ''
            ent['pdir'] = mat['pic_dir']
            ent['disp_format'] = mat['disp_format']
            if not ent['pdir']:
                ent['pdir'] = pif.render.pic_dir
            if ent['model_type'] == 'MP':
                ent['image'] = pif.render.format_image_required(
                    ent['mod_id'],
                    prefix=mbdata.IMG_SIZ_SMALL,
                    pdir=config.IMG_DIR_MAN,
                    nopad=True)
            elif ent.get('picture_id'):
                ent['image'] = pif.render.format_image_required(
                    ent['mod_id'] + '-' + ent['picture_id'],
                    prefix=mbdata.IMG_SIZ_SMALL,
                    pdir=config.IMG_DIR_VAR,
                    nopad=True)
            elif ent.get('var'):
                ent['image'] = pif.render.format_image_required(
                    ent['mod_id'] + '-' + ent['var'],
                    prefix=mbdata.IMG_SIZ_SMALL,
                    pdir=config.IMG_DIR_VAR,
                    nopad=True)
            ent['range_id'] = range_id
            mat['ents'].setdefault(ent['range_id'], list())
            mat['ents'][ent['range_id']].append(ent)
            pif.render.comment('        entry:', ent)
        disp_order = 1
        for range_id in sorted(mat['ents']):
            mat['ents'][range_id][0]['display_order'] = disp_order
            disp_order += 1
        self.tables.append(mat)
Пример #28
0
def show_dir(pif, tform):
    if not os.path.exists(tform.tdir):
        raise useful.SimpleError('Path does not exist.')

    ostr = '<hr>\n'
    # dl, gl, ol, sl, xl = imglib.get_dir(tform.tdir)
    files = imglib.get_dir(tform.tdir, name_has=tform.has)

    ostr += show_list(files['titles']['dir'], tform.tdir, files['dir'],
                      tform.view)

    if files['graf']:
        if tform.graf:
            ostr += '<h4>{} ({})</h4><div class="glist">\n'.format(
                files['titles']['graf'], len(files['graf']))
            for f in files['graf']:
                perms = os.stat(tform.tdir + '/' + f)[stat.ST_MODE]
                if (perms & 4) == 0:
                    ostr += '{}<br>\n'.format(f)
                elif tform.graf:
                    ostr += pif.render.format_link(
                        'imawidget.cgi',
                        '<img src="../{}/{}" border=0>{}'.format(
                            tform.tdir, f, f), {
                                'd': tform.tdir,
                                'f': f,
                                'man': tform.mod,
                                'newvar': tform.var,
                                'cy': 0,
                                'suff': tform.suff
                            })
                else:
                    ostr += '<a href="../{}">{}</a><br>\n'.format(
                        tform.tdir + '/' + f, f)
            ostr += '</div><hr>\n'
        else:
            ostr += show_list(files['titles']['graf'], tform.tdir,
                              files['graf'], tform.view)

    ostr += show_list(files['titles']['log'], tform.tdir, files['log'],
                      tform.view)
    ostr += show_list(files['titles']['dat'], tform.tdir, files['dat'],
                      tform.view)
    ostr += show_list(files['titles']['exe'], tform.tdir, files['exe'],
                      tform.view)
    ostr += show_list(files['titles']['other'], tform.tdir, files['other'],
                      tform.view)

    if pif.render.is_admin:
        ostr += '<a href="upload.cgi?d={}">{}</a>\n'.format(
            tform.tdir, pif.render.format_button('upload'))

    if files['graf']:
        ostr += '<form action="traverse.cgi">\n' + pif.create_token()
        ostr += '<a href="traverse.cgi?g=1&d={}">{}</a> or \n'.format(
            tform.tdir, pif.render.format_button('show all pictures'))
        ostr += 'Pattern <input type="text" name="p">\n'
        ostr += '<input type="hidden" name="d" value="{}">\n'.format(
            tform.tdir)
        ostr += pif.render.format_checkbox('du', [(
            '1',
            'Dupes',
        )])
        ostr += pif.render.format_checkbox('co', [(
            '1',
            'Compact',
        )])
        ostr += pif.render.format_checkbox('th', [(
            '1',
            'Thumbs',
        )])
        ostr += pif.render.format_checkbox('si', [(
            '1',
            'Sized',
        )])
        ostr += pif.render.format_checkbox('mr', [(
            '1',
            'Recent',
        )])
        if pif.render.is_admin:
            lty = [(
                'nrm',
                'Normal',
            ), (
                'shc',
                'Categorize',
            ), (
                'mss',
                'VMass',
            ), (
                'pms',
                'PMass',
            ), (
                'shm',
                'Shelve',
            ), (
                'suf',
                'Resuffix',
            ), (
                'crd',
                'Credit',
            )]
            ostr += '<br>'
            ostr += pif.render.format_radio('lty', lty, 'nrm')
        ostr += pif.render.format_button_input()
        ostr += '<br>\n'
        ostr += 'Size X <input type="text" name="sx">\n'
        ostr += 'Size Y <input type="text" name="sy">\n'
        ostr += '</form>\n'
    return ostr