список цифровых образов документов
лист №1,кадр:0 / карточка  аннотация 
Заявление о принятии в члены партии
jpeg, 992.7 кб. , д.оц. 2011-02-28 10:31:52
лист №2,кадр:0 / карточка  аннотация 
Анкета вcтупающего в партию
jpeg, 1.1 мб. , д.оц. 2011-02-28 10:31:52
лист №2 (об.),кадр:0 / карточка  аннотация 
Анкета кандидата партии ВКП(б)
jpeg, 10.2 мб. , д.оц. 2011-02-28 15:01:07
лист №3,кадр:0 / карточка  аннотация 
Автобиография
jpeg, 987.8 кб. , д.оц. 2011-02-28 15:01:07
лист №4,кадр:0 / карточка  аннотация 
Рекомендация
jpeg, 1007.2 кб. , д.оц. 2011-02-28 15:01:07
лист №5,кадр:0 / карточка  аннотация 
Рекомендация
jpeg, 1001.3 кб. , д.оц. 2011-02-28 15:01:07
лист №6,кадр:0 / карточка  аннотация 
Рекомендация
jpeg, 996.3 кб. , д.оц. 2011-02-28 15:01:07
лист №7,кадр:0 / карточка  аннотация 
Выписка из протокола заседания парткомитета о принятии кандидатом в члены ВКП(б)
jpeg, 1003.4 кб. , д.оц. 2011-02-28 15:01:07
лист №8,кадр:0 / карточка  аннотация 
Заявление о принятии в кандидаты ВКП(б)
jpeg, 992.8 кб. , д.оц. 2011-02-28 15:01:07
лист №9,кадр:0 / карточка  аннотация 
Анкета вcтупающего кандидатом в члены ВКП(б)
jpeg, 1017.2 кб. , д.оц. 2011-02-28 15:01:07
лист №9 (об.),кадр:0 / карточка  аннотация 
Анкета вcтупающего кандидатом в члены ВКП(б)
jpeg, 10.5 мб. , д.оц. 2011-02-28 15:01:09
лист №10,кадр:0 / карточка  аннотация 
Автобиография
jpeg, 1.0 мб. , д.оц. 2011-02-28 15:01:09
лист №10 (об.),кадр:0 / карточка  аннотация 
Автобиография
jpeg, 9.4 мб. , д.оц. 2011-02-28 15:01:09
лист №11,кадр:0 / карточка  аннотация 
Автобиография
jpeg, 1.0 мб. , д.оц. 2011-02-28 15:01:09
лист №12,кадр:0 / карточка  аннотация 
Рекомендация
jpeg, 1.0 мб. , д.оц. 2011-02-28 15:01:09
лист №13,кадр:0 / карточка  аннотация 
Рекомендация
jpeg, 1021.8 кб. , д.оц. 2011-02-28 15:01:09
лист №13 (об.),кадр:0 / карточка  аннотация 
Рекомендация
jpeg, 1.4 мб. , д.оц. 2011-02-28 15:01:09
лист №14,кадр:0 / карточка  аннотация 
Рекомендация
jpeg, 1.0 мб. , д.оц. 2011-02-28 15:01:09
лист №15,кадр:0 / карточка  аннотация 
Выписка из протокола заседания парткомитета о принятии в члены ВКП(б)
jpeg, 1.0 мб. , д.оц. 2011-02-28 15:01:10
всего содержит: 19 записей, страницы: «  1  »  весь список (1 стр.)

    Исходный код модуля /home/httpd/af-web.gaspiko.ru/cgi-bin/plugins2/list_digital_image.pyc

    # -*- coding: utf8 -*-
    import config
    SQL = """
    select SQL_CALC_FOUND_ROWS replace(file_path,'""" + config.backup_www + """','')as web_file_path, dim.*,f.FKOD,o.OKOD,f.FNAME,o.ONAME,d.L1,d.L4
            from
                digital_image dim
                left join FOND f on(FOND_ID=f.KOD)
                left join OPIS o on(OPIS_ID=o.KOD)
                left join DELO d on (DELO_ID=d.KOD)
            %(where)s
            order by cast(num_list as signed), cast(num_kadr  as signed)
            limit %(offset)d,%(limit)d;
    """
    FOUND_ROWS = True
    ROOT = "list_digital_image"
    ROOT_PREFIX = ""
    ROOT_POSTFIX= None
    XSL_TEMPLATE = "data/af-web.xsl"
    EVENT = None
    WHERE = ("DELO_ID", "type_image", "FOND_ID", "OPIS_ID")
    PARAM = None
    TITLE="Список цифровых образов"
    MESSAGE="нет цифровых образов"
    ORDER = None

    Исходный код модуля /home/httpd/af-web.gaspiko.ru/cgi-bin/app2.py

    #!/usr/bin/env python
    #
    #       app2.py
    #
    #       Copyright 2010 Basmanov Illya 
    #
    #       This program is free software; you can redistribute it and/or modify
    #       it under the terms of the GNU General Public License as published by
    #       the Free Software Foundation; either version 2 of the License, or
    #       (at your option) any later version.
    #
    #       This program is distributed in the hope that it will be useful,
    #       but WITHOUT ANY WARRANTY; without even the implied warranty of
    #       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #       GNU General Public License for more details.
    #
    #       You should have received a copy of the GNU General Public License
    #       along with this program; if not, write to the Free Software
    #       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
    #       MA 02110-1301, USA.
    import sys
    import config

    #sys.stderr = sys.stdout
    #print "Content-Type: text/html; charset=utf8\n\n"

    import ffcgi
    import libs
    from user import user
    from base import bd_sql
    from xslt_proc import xml_xsl_proc

    plugin_dir = "plugins2"


    def load_module():
        if ffcgi.cgi_check_name("plugins"):
            module_name = ffcgi.cgi_value( "plugins" )
            return libs.load_module_name(module_name, plugin_dir)
        else:
            return None


    def load_env():
        data, page, limit = {}, 0, int(config.limit)
        if ffcgi.cgi_check_name("p"):
            page = int(ffcgi.cgi_value("p"))
        if ffcgi.cgi_check_name("l"):
            limit = int(ffcgi.cgi_value("l"))
        if ffcgi.cgi_check_name("plugins"):
            data["plugins"] = ffcgi.cgi_value( "plugins" )
        if ffcgi.cgi_value("ORDER_DIRECTION") in ("DESC", "ASC"):
            data["direction"] = ffcgi.cgi_value("ORDER_DIRECTION")
        else:
            data["direction"] = "DESC"
        data["page"] = page
        data["limit"] = limit
        data["offset"] = page * limit
        xml = user[3] +"%(page)d%(limit)d%(offset)d%(plugins)s%(direction)s"%data
        return data, xml

    def make_order(cgi_param):
        if cgi_param is not None:
            order = []
            direction = "DESC"
            if ffcgi.cgi_value("ORDER_DIRECTION") in ("DESC", "ASC"):
                direction = ffcgi.cgi_value("ORDER_DIRECTION")
            for param in cgi_param:
                if ffcgi.cgi_value("ORDER") == param:
                    value = param
                    if type(value) == list:
                        order.append( ", ".join(["`%s`"%v for v in value]) )
                    elif type(value) == str:
                        order.append( "`%s`"%value )
                    return " ORDER BY %s %s"%(",".join(order), direction)
        return ""


    def make_where(cgi_param, IF_ID_DOMEN=None):
        if cgi_param is None:
            return ""
        where = []
        where_like = []
        if IF_ID_DOMEN is not None:
            where.append(IF_ID_DOMEN)
        if ffcgi.cgi_check_name("WHERE_LIKE"):
            where_like = ffcgi.cgi_value("WHERE_LIKE")
        for param in cgi_param:
            if ffcgi.cgi_check_name(param):
                value = ffcgi.cgi_value(param)
                if type(value) == list:
                    param = param.replace('.','`.`')
                    if ffcgi.cgi_check_name("BETWEEN") and len(value)==2:
                        where.append( "`%s` BETWEEN %s AND %s"%(param, value[0], value[1] ))
                    else:
                        where.append( "`%s` IN (%s)"%(param, ", ".join(["'%s'"%v for v in value])) )
                elif type(value) == str or type(value) == int :
                    if param in where_like:
                        param = param.replace('.','`.`')
                        where.append( "`%s` LIKE '%%%s%%'"%(param, str(value)) )
                    else:
                        param = param.replace('.','`.`')
                        where.append( "`%s`='%s'"%(param, str(value)) )
                else:
                    pass
        if len(where):
            where = " AND ".join(where)
            return "WHERE "+where
        return ""

    def list_to_xml(listtx):
        txml = ""
        if listtx:
                for lx in listtx:
                    txml += "%s"%lx
        return txml

    def exec_sql(module, data, sql, root):
        xml = ""
        try:
            sql = sql%data
            if ffcgi.cgi_check_name("SQL"):
                print sql, ""
            if bd_sql.execute( sql, module.TITLE ):
                txml = bd_sql.get_xml( event = module.EVENT)
                if module.FOUND_ROWS:
                    if bd_sql.execute( "select found_rows() as count;" ):
                        txml += bd_sql.get_xml("all_count")
                xml = "<%s>%s"%(root, txml, root)
            else:
                if module.ROOT_POSTFIX:
                    xml += module.ROOT_POSTFIX
                xml += libs.make_message( "%s"%libs.make_cdata(module.MESSAGE) + "%s"%libs.make_cdata(sql) )
        except Exception, e:
            xml += libs.make_message( "%s: %s"%libs.make_cdata(module.MESSAGE, e) )
        return xml

    def exec_sql_json(module, data, sql, root):
        json_data = {root: {}, }
        try:
            sql = sql%data
            if ffcgi.cgi_check_name("SQL"):
                print sql, ""
            if bd_sql.execute( sql, module.TITLE ):
                json_data[root]["row"] = bd_sql.get_row()
                if module.FOUND_ROWS:
                    if bd_sql.execute( "select found_rows() as count;" ):
                        json_data[root]["all_count"] = bd_sql.get_row()[0][0]
            else:
                json_data[root]['error-message'] = module.MESSAGE
                json_data[root]['error-sql'] = sql
        except Exception, e:
            json_data[root]['error-message'] = module.MESSAGE
            json_data[root]['error-sql'] = sql
        return json_data

    def main():

        module = load_module()
        if module:
            data, xml = load_env()
            xml += ffcgi.cgi_xml() + "%s"%list_to_xml(module.WHERE)
            if_id_domen = None
            if "IF_ID_DOMEN" in dir(module):
                if_id_domen = module.IF_ID_DOMEN
            data["where"] = make_where(module.WHERE, if_id_domen)
            data["order"] = make_order(module.ORDER)
            xml += "%s"%module.TITLE


            if module.PARAM:
                txml = ""
                for param in module.PARAM:
                    if ffcgi.cgi_check_name(param):
                        value = ffcgi.cgi_value(param)
                        if type(value) == list:
                            for v in value:
                                data[param] = v
                                txml += "<%s>%s"%(param, libs.make_str_cdata( v ), param)
                        elif type(value) == str:
                            data[param] = value
                            txml += "<%s>%s"%(param, libs.make_str_cdata(value), param)
                xml += "%s"%txml

            if module.ROOT_PREFIX:
                xml += module.ROOT_PREFIX

            if ffcgi.cgi_check_name("cmd") and ffcgi.cgi_value("cmd")=="add":
                xml += "<%s />"%module.ROOT
            elif ffcgi.cgi_check_name("format"):
                # output format JSON
                try:
                    from json import dumps
                except:
                    from simplejson import dumps
                json_data = {module.ROOT:  [exec_sql_json(module, data, sql = module.SQL[i][1], root = module.SQL[i][0]) for i in range(0, len(module.SQL))][0]}
                print dumps( json_data )
                return
            else:
                if type(module.SQL)==str:
                    xml += exec_sql(module, data, module.SQL, module.ROOT)
                else:
                    xml += "<%s>%s"%(module.ROOT, "\n\t\t".join([exec_sql(module, data, sql = module.SQL[i][1], root = module.SQL[i][0]) for i in range(0, len(module.SQL))]), module.ROOT)



            if ffcgi.cgi_check_name("dbg"):
                xml += bd_sql.history()

            if ffcgi.cgi_check_name("src"):
                def make_source(filename):
                    return filename, libs.make_str_cdata(open(".".join(filename.split('.')[:-1])+".py").read().replace(" "," "))
                xml += "%s%s"%make_source(module.__file__)
                xml += "%s%s"%make_source(__file__)


            xml = "%s"%xml.replace('\0','')
            libs.save_xml(xml, module.__file__ )

            try:
                print xml_xsl_proc(xml,fxsl=module.XSL_TEMPLATE)
            except Exception, e:
                print e

        else:
            print "no define module"
        return 0

    if __name__ == '__main__':
        try:
            main()
        except Exception, e:
                print e

    Отладочная информация

    список sql запросов страницы

    1. INSERT INTO session (UID,HASH,REFERER,UAGENT,date,id_domen) VALUES(0,'guest3080217195818278828','','webkit/None',now(),@id_domen)#созадём новую сессию для ананимоуса
    2. select SQL_CALC_FOUND_ROWS replace(file_path,'/home/ffsdmad/www/af-web.gaspiko.ru/www','')as web_file_path, dim.*,f.FKOD,o.OKOD,f.FNAME,o.ONAME,d.L1,d.L4 from digital_image dim left join FOND f on(FOND_ID=f.KOD) left join OPIS o on(OPIS_ID=o.KOD) left join DELO d on (DELO_ID=d.KOD) WHERE `DELO_ID`='61' AND `FOND_ID`='100' AND `OPIS_ID`='288' order by cast(num_list as signed), cast(num_kadr as signed) limit 0,25; #Список цифровых образов
    3. select found_rows() as count;#

    список CGI параметров

    параметр значение
    src show
    OPIS_ID 288
    dbg show
    plugins list_digital_image
    DELO_ID 61
    FOND_ID 100