├── .gitignore
├── LICENSE
├── README.md
├── doc
├── database
│ ├── install.sql
│ └── upgrade
│ │ ├── v1.0.10.sql
│ │ ├── v1.0.14.sql
│ │ ├── v1.0.7.sql
│ │ ├── v1.0.8.sql
│ │ └── v1.0.9.sql
├── 安装教程.docx
└── 更新日志.txt
├── icon.jpg
├── source
├── application
│ ├── api
│ │ ├── config.php
│ │ ├── controller
│ │ │ ├── Address.php
│ │ │ ├── Cart.php
│ │ │ ├── Category.php
│ │ │ ├── Controller.php
│ │ │ ├── Goods.php
│ │ │ ├── Index.php
│ │ │ ├── Order.php
│ │ │ ├── User.php
│ │ │ ├── Wxapp.php
│ │ │ └── user
│ │ │ │ ├── Index.php
│ │ │ │ └── Order.php
│ │ └── model
│ │ │ ├── Cart.php
│ │ │ ├── Category.php
│ │ │ ├── Delivery.php
│ │ │ ├── DeliveryRule.php
│ │ │ ├── Goods.php
│ │ │ ├── GoodsImage.php
│ │ │ ├── GoodsSpec.php
│ │ │ ├── GoodsSpecRel.php
│ │ │ ├── Order.php
│ │ │ ├── OrderAddress.php
│ │ │ ├── OrderGoods.php
│ │ │ ├── Setting.php
│ │ │ ├── Spec.php
│ │ │ ├── SpecValue.php
│ │ │ ├── UploadFile.php
│ │ │ ├── User.php
│ │ │ ├── UserAddress.php
│ │ │ ├── Wxapp.php
│ │ │ ├── WxappHelp.php
│ │ │ ├── WxappNavbar.php
│ │ │ └── WxappPage.php
│ ├── common.php
│ ├── common
│ │ ├── exception
│ │ │ ├── BaseException.php
│ │ │ └── ExceptionHandler.php
│ │ ├── library
│ │ │ ├── helper.php
│ │ │ ├── sms
│ │ │ │ ├── Driver.php
│ │ │ │ ├── engine
│ │ │ │ │ ├── Aliyun.php
│ │ │ │ │ └── Server.php
│ │ │ │ └── package
│ │ │ │ │ └── aliyun
│ │ │ │ │ └── SignatureHelper.php
│ │ │ ├── storage
│ │ │ │ ├── Driver.php
│ │ │ │ └── engine
│ │ │ │ │ ├── Local.php
│ │ │ │ │ ├── Qiniu.php
│ │ │ │ │ └── Server.php
│ │ │ └── wechat
│ │ │ │ ├── WxPay.php
│ │ │ │ ├── WxUser.php
│ │ │ │ └── logs
│ │ │ │ └── .gitignore
│ │ └── model
│ │ │ ├── BaseModel.php
│ │ │ ├── Category.php
│ │ │ ├── Delivery.php
│ │ │ ├── DeliveryRule.php
│ │ │ ├── Goods.php
│ │ │ ├── GoodsImage.php
│ │ │ ├── GoodsSpec.php
│ │ │ ├── GoodsSpecRel.php
│ │ │ ├── Order.php
│ │ │ ├── OrderAddress.php
│ │ │ ├── OrderGoods.php
│ │ │ ├── Region.php
│ │ │ ├── Setting.php
│ │ │ ├── Spec.php
│ │ │ ├── SpecValue.php
│ │ │ ├── StoreUser.php
│ │ │ ├── UploadFile.php
│ │ │ ├── UploadFileUsed.php
│ │ │ ├── UploadGroup.php
│ │ │ ├── User.php
│ │ │ ├── UserAddress.php
│ │ │ ├── Wxapp.php
│ │ │ ├── WxappHelp.php
│ │ │ ├── WxappNavbar.php
│ │ │ └── WxappPage.php
│ ├── config.php
│ ├── database.php
│ ├── route.php
│ ├── store
│ │ ├── config.php
│ │ ├── controller
│ │ │ ├── Controller.php
│ │ │ ├── Goods.php
│ │ │ ├── Index.php
│ │ │ ├── Order.php
│ │ │ ├── Passport.php
│ │ │ ├── Setting.php
│ │ │ ├── Upload.php
│ │ │ ├── User.php
│ │ │ ├── Wxapp.php
│ │ │ ├── goods
│ │ │ │ ├── Category.php
│ │ │ │ └── Spec.php
│ │ │ ├── setting
│ │ │ │ ├── Cache.php
│ │ │ │ ├── Delivery.php
│ │ │ │ └── Science.php
│ │ │ ├── store
│ │ │ │ └── User.php
│ │ │ ├── upload
│ │ │ │ └── Library.php
│ │ │ └── wxapp
│ │ │ │ ├── Help.php
│ │ │ │ └── Page.php
│ │ ├── extra
│ │ │ └── menus.php
│ │ ├── model
│ │ │ ├── Category.php
│ │ │ ├── Delivery.php
│ │ │ ├── DeliveryRule.php
│ │ │ ├── Goods.php
│ │ │ ├── GoodsImage.php
│ │ │ ├── GoodsSpec.php
│ │ │ ├── GoodsSpecRel.php
│ │ │ ├── Order.php
│ │ │ ├── OrderAddress.php
│ │ │ ├── OrderGoods.php
│ │ │ ├── Region.php
│ │ │ ├── Setting.php
│ │ │ ├── Spec.php
│ │ │ ├── SpecValue.php
│ │ │ ├── StoreUser.php
│ │ │ ├── UploadFile.php
│ │ │ ├── UploadFileUsed.php
│ │ │ ├── UploadGroup.php
│ │ │ ├── User.php
│ │ │ ├── Wxapp.php
│ │ │ ├── WxappHelp.php
│ │ │ ├── WxappNavbar.php
│ │ │ └── WxappPage.php
│ │ └── view
│ │ │ ├── goods
│ │ │ ├── _template
│ │ │ │ └── spec_many.php
│ │ │ ├── add.php
│ │ │ ├── category
│ │ │ │ ├── add.php
│ │ │ │ ├── edit.php
│ │ │ │ └── index.php
│ │ │ ├── edit.php
│ │ │ └── index.php
│ │ │ ├── index
│ │ │ ├── demo-list.php
│ │ │ └── index.php
│ │ │ ├── layouts
│ │ │ ├── _template
│ │ │ │ ├── file_library.php
│ │ │ │ └── tpl_file_item.php
│ │ │ └── layout.php
│ │ │ ├── order
│ │ │ ├── detail.php
│ │ │ └── index.php
│ │ │ ├── passport
│ │ │ └── login.php
│ │ │ ├── setting
│ │ │ ├── cache
│ │ │ │ └── clear.php
│ │ │ ├── delivery
│ │ │ │ ├── add.php
│ │ │ │ ├── edit.php
│ │ │ │ └── index.php
│ │ │ ├── science
│ │ │ │ └── index.php
│ │ │ ├── sms.php
│ │ │ ├── storage.php
│ │ │ ├── store.php
│ │ │ └── trade.php
│ │ │ ├── store
│ │ │ └── user
│ │ │ │ └── renew.php
│ │ │ ├── user
│ │ │ └── index.php
│ │ │ └── wxapp
│ │ │ ├── help
│ │ │ ├── add.php
│ │ │ ├── edit.php
│ │ │ └── index.php
│ │ │ ├── page
│ │ │ ├── home.php
│ │ │ ├── links.php
│ │ │ └── tpl
│ │ │ │ ├── diy.php
│ │ │ │ └── editor.php
│ │ │ ├── setting.php
│ │ │ └── tabbar.php
│ ├── tags.php
│ └── task
│ │ ├── behavior
│ │ ├── Order.php
│ │ └── logs
│ │ │ └── .gitignore
│ │ ├── controller
│ │ └── Notify.php
│ │ └── model
│ │ ├── Goods.php
│ │ ├── GoodsSpec.php
│ │ ├── Order.php
│ │ ├── OrderGoods.php
│ │ └── Setting.php
├── composer.json
├── runtime
│ └── .gitignore
├── thinkphp
│ ├── .gitignore
│ ├── .htaccess
│ ├── .travis.yml
│ ├── CONTRIBUTING.md
│ ├── LICENSE.txt
│ ├── README.md
│ ├── base.php
│ ├── codecov.yml
│ ├── composer.json
│ ├── console.php
│ ├── convention.php
│ ├── helper.php
│ ├── lang
│ │ └── zh-cn.php
│ ├── library
│ │ ├── think
│ │ │ ├── App.php
│ │ │ ├── Build.php
│ │ │ ├── Cache.php
│ │ │ ├── Collection.php
│ │ │ ├── Config.php
│ │ │ ├── Console.php
│ │ │ ├── Controller.php
│ │ │ ├── Cookie.php
│ │ │ ├── Db.php
│ │ │ ├── Debug.php
│ │ │ ├── Env.php
│ │ │ ├── Error.php
│ │ │ ├── Exception.php
│ │ │ ├── File.php
│ │ │ ├── Hook.php
│ │ │ ├── Lang.php
│ │ │ ├── Loader.php
│ │ │ ├── Log.php
│ │ │ ├── Model.php
│ │ │ ├── Paginator.php
│ │ │ ├── Process.php
│ │ │ ├── Request.php
│ │ │ ├── Response.php
│ │ │ ├── Route.php
│ │ │ ├── Session.php
│ │ │ ├── Template.php
│ │ │ ├── Url.php
│ │ │ ├── Validate.php
│ │ │ ├── View.php
│ │ │ ├── cache
│ │ │ │ ├── Driver.php
│ │ │ │ └── driver
│ │ │ │ │ ├── File.php
│ │ │ │ │ ├── Lite.php
│ │ │ │ │ ├── Memcache.php
│ │ │ │ │ ├── Memcached.php
│ │ │ │ │ ├── Redis.php
│ │ │ │ │ ├── Sqlite.php
│ │ │ │ │ ├── Wincache.php
│ │ │ │ │ └── Xcache.php
│ │ │ ├── config
│ │ │ │ └── driver
│ │ │ │ │ ├── Ini.php
│ │ │ │ │ ├── Json.php
│ │ │ │ │ └── Xml.php
│ │ │ ├── console
│ │ │ │ ├── Command.php
│ │ │ │ ├── Input.php
│ │ │ │ ├── LICENSE
│ │ │ │ ├── Output.php
│ │ │ │ ├── bin
│ │ │ │ │ ├── README.md
│ │ │ │ │ └── hiddeninput.exe
│ │ │ │ ├── command
│ │ │ │ │ ├── Build.php
│ │ │ │ │ ├── Clear.php
│ │ │ │ │ ├── Help.php
│ │ │ │ │ ├── Lists.php
│ │ │ │ │ ├── Make.php
│ │ │ │ │ ├── make
│ │ │ │ │ │ ├── Controller.php
│ │ │ │ │ │ ├── Model.php
│ │ │ │ │ │ └── stubs
│ │ │ │ │ │ │ ├── controller.plain.stub
│ │ │ │ │ │ │ ├── controller.stub
│ │ │ │ │ │ │ └── model.stub
│ │ │ │ │ └── optimize
│ │ │ │ │ │ ├── Autoload.php
│ │ │ │ │ │ ├── Config.php
│ │ │ │ │ │ ├── Route.php
│ │ │ │ │ │ └── Schema.php
│ │ │ │ ├── input
│ │ │ │ │ ├── Argument.php
│ │ │ │ │ ├── Definition.php
│ │ │ │ │ └── Option.php
│ │ │ │ └── output
│ │ │ │ │ ├── Ask.php
│ │ │ │ │ ├── Descriptor.php
│ │ │ │ │ ├── Formatter.php
│ │ │ │ │ ├── Question.php
│ │ │ │ │ ├── descriptor
│ │ │ │ │ └── Console.php
│ │ │ │ │ ├── driver
│ │ │ │ │ ├── Buffer.php
│ │ │ │ │ ├── Console.php
│ │ │ │ │ └── Nothing.php
│ │ │ │ │ ├── formatter
│ │ │ │ │ ├── Stack.php
│ │ │ │ │ └── Style.php
│ │ │ │ │ └── question
│ │ │ │ │ ├── Choice.php
│ │ │ │ │ └── Confirmation.php
│ │ │ ├── controller
│ │ │ │ ├── Rest.php
│ │ │ │ └── Yar.php
│ │ │ ├── db
│ │ │ │ ├── Builder.php
│ │ │ │ ├── Connection.php
│ │ │ │ ├── Expression.php
│ │ │ │ ├── Query.php
│ │ │ │ ├── builder
│ │ │ │ │ ├── Mysql.php
│ │ │ │ │ ├── Pgsql.php
│ │ │ │ │ ├── Sqlite.php
│ │ │ │ │ └── Sqlsrv.php
│ │ │ │ ├── connector
│ │ │ │ │ ├── Mysql.php
│ │ │ │ │ ├── Pgsql.php
│ │ │ │ │ ├── Sqlite.php
│ │ │ │ │ ├── Sqlsrv.php
│ │ │ │ │ └── pgsql.sql
│ │ │ │ └── exception
│ │ │ │ │ ├── BindParamException.php
│ │ │ │ │ ├── DataNotFoundException.php
│ │ │ │ │ └── ModelNotFoundException.php
│ │ │ ├── debug
│ │ │ │ ├── Console.php
│ │ │ │ └── Html.php
│ │ │ ├── exception
│ │ │ │ ├── ClassNotFoundException.php
│ │ │ │ ├── DbException.php
│ │ │ │ ├── ErrorException.php
│ │ │ │ ├── Handle.php
│ │ │ │ ├── HttpException.php
│ │ │ │ ├── HttpResponseException.php
│ │ │ │ ├── PDOException.php
│ │ │ │ ├── RouteNotFoundException.php
│ │ │ │ ├── TemplateNotFoundException.php
│ │ │ │ ├── ThrowableError.php
│ │ │ │ └── ValidateException.php
│ │ │ ├── log
│ │ │ │ └── driver
│ │ │ │ │ ├── File.php
│ │ │ │ │ ├── Socket.php
│ │ │ │ │ └── Test.php
│ │ │ ├── model
│ │ │ │ ├── Collection.php
│ │ │ │ ├── Merge.php
│ │ │ │ ├── Pivot.php
│ │ │ │ ├── Relation.php
│ │ │ │ └── relation
│ │ │ │ │ ├── BelongsTo.php
│ │ │ │ │ ├── BelongsToMany.php
│ │ │ │ │ ├── HasMany.php
│ │ │ │ │ ├── HasManyThrough.php
│ │ │ │ │ ├── HasOne.php
│ │ │ │ │ ├── MorphMany.php
│ │ │ │ │ ├── MorphOne.php
│ │ │ │ │ ├── MorphTo.php
│ │ │ │ │ └── OneToOne.php
│ │ │ ├── paginator
│ │ │ │ └── driver
│ │ │ │ │ └── Bootstrap.php
│ │ │ ├── process
│ │ │ │ ├── Builder.php
│ │ │ │ ├── Utils.php
│ │ │ │ ├── exception
│ │ │ │ │ ├── Failed.php
│ │ │ │ │ └── Timeout.php
│ │ │ │ └── pipes
│ │ │ │ │ ├── Pipes.php
│ │ │ │ │ ├── Unix.php
│ │ │ │ │ └── Windows.php
│ │ │ ├── response
│ │ │ │ ├── Json.php
│ │ │ │ ├── Jsonp.php
│ │ │ │ ├── Redirect.php
│ │ │ │ ├── View.php
│ │ │ │ └── Xml.php
│ │ │ ├── session
│ │ │ │ └── driver
│ │ │ │ │ ├── Memcache.php
│ │ │ │ │ ├── Memcached.php
│ │ │ │ │ └── Redis.php
│ │ │ ├── template
│ │ │ │ ├── TagLib.php
│ │ │ │ ├── driver
│ │ │ │ │ └── File.php
│ │ │ │ └── taglib
│ │ │ │ │ └── Cx.php
│ │ │ └── view
│ │ │ │ └── driver
│ │ │ │ ├── Php.php
│ │ │ │ └── Think.php
│ │ └── traits
│ │ │ ├── controller
│ │ │ └── Jump.php
│ │ │ ├── model
│ │ │ └── SoftDelete.php
│ │ │ └── think
│ │ │ └── Instance.php
│ ├── logo.png
│ ├── phpunit.xml
│ ├── start.php
│ └── tpl
│ │ ├── default_index.tpl
│ │ ├── dispatch_jump.tpl
│ │ ├── page_trace.tpl
│ │ └── think_exception.tpl
└── vendor
│ ├── autoload.php
│ ├── composer
│ ├── ClassLoader.php
│ ├── LICENSE
│ ├── autoload_classmap.php
│ ├── autoload_files.php
│ ├── autoload_namespaces.php
│ ├── autoload_psr4.php
│ ├── autoload_real.php
│ ├── autoload_static.php
│ └── installed.json
│ ├── qiniu
│ └── php-sdk
│ │ ├── .gitignore
│ │ ├── .scrutinizer.yml
│ │ ├── .travis.yml
│ │ ├── CHANGELOG.md
│ │ ├── CONTRIBUTING.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── autoload.php
│ │ ├── composer.json
│ │ ├── docs
│ │ └── rtc
│ │ │ ├── README.md
│ │ │ └── example.php
│ │ ├── examples
│ │ ├── README.md
│ │ ├── cdn_get_bandwidth.php
│ │ ├── cdn_get_flux.php
│ │ ├── cdn_get_log_list.php
│ │ ├── cdn_refresh_urls_dirs.php
│ │ ├── cdn_timestamp_antileech.php
│ │ ├── image_url_builder.php
│ │ ├── persistent_fop_init.php
│ │ ├── persistent_fop_status.php
│ │ ├── pfop_mkzip.php
│ │ ├── pfop_vframe.php
│ │ ├── pfop_video_avthumb.php
│ │ ├── pfop_watermark.php
│ │ ├── php-logo.png
│ │ ├── prefop.php
│ │ ├── pulpvideo.php
│ │ ├── qetag.php
│ │ ├── rs_batch_change_mime.php
│ │ ├── rs_batch_change_type.php
│ │ ├── rs_batch_copy.php
│ │ ├── rs_batch_delete.php
│ │ ├── rs_batch_delete_after_days.php
│ │ ├── rs_batch_move.php
│ │ ├── rs_batch_stat.php
│ │ ├── rs_bucket_domains.php
│ │ ├── rs_buckets.php
│ │ ├── rs_change_mime.php
│ │ ├── rs_change_status.php
│ │ ├── rs_change_type.php
│ │ ├── rs_copy.php
│ │ ├── rs_delete.php
│ │ ├── rs_delete_after_days.php
│ │ ├── rs_download_urls.php
│ │ ├── rs_fetch.php
│ │ ├── rs_move.php
│ │ ├── rs_prefetch.php
│ │ ├── rs_stat.php
│ │ ├── rsf_list_bucket.php
│ │ ├── rsf_list_files.php
│ │ ├── saveas.php
│ │ ├── upload_and_callback.php
│ │ ├── upload_and_pfop.php
│ │ ├── upload_mgr_init.php
│ │ ├── upload_multi_demos.php
│ │ ├── upload_simple_file.php
│ │ ├── upload_tokens.php
│ │ └── upload_verify_callback.php
│ │ ├── phpunit.xml.dist
│ │ ├── src
│ │ └── Qiniu
│ │ │ ├── Auth.php
│ │ │ ├── Cdn
│ │ │ └── CdnManager.php
│ │ │ ├── Config.php
│ │ │ ├── Etag.php
│ │ │ ├── Http
│ │ │ ├── Client.php
│ │ │ ├── Error.php
│ │ │ ├── Request.php
│ │ │ └── Response.php
│ │ │ ├── Processing
│ │ │ ├── ImageUrlBuilder.php
│ │ │ ├── Operation.php
│ │ │ └── PersistentFop.php
│ │ │ ├── Rtc
│ │ │ └── AppClient.php
│ │ │ ├── Storage
│ │ │ ├── ArgusManager.php
│ │ │ ├── BucketManager.php
│ │ │ ├── FormUploader.php
│ │ │ ├── ResumeUploader.php
│ │ │ └── UploadManager.php
│ │ │ ├── Zone.php
│ │ │ └── functions.php
│ │ ├── test-env.sh
│ │ └── tests
│ │ ├── Qiniu
│ │ └── Tests
│ │ │ ├── AuthTest.php
│ │ │ ├── Base64Test.php
│ │ │ ├── BucketTest.php
│ │ │ ├── CdnManagerTest.php
│ │ │ ├── Crc32Test.php
│ │ │ ├── DownloadTest.php
│ │ │ ├── EtagTest.php
│ │ │ ├── FopTest.php
│ │ │ ├── FormUpTest.php
│ │ │ ├── HttpTest.php
│ │ │ ├── ImageUrlBuilderTest.php
│ │ │ ├── PfopTest.php
│ │ │ ├── ResumeUpTest.php
│ │ │ └── ZoneTest.php
│ │ └── bootstrap.php
│ └── topthink
│ └── think-installer
│ ├── .gitignore
│ ├── composer.json
│ └── src
│ ├── Plugin.php
│ ├── ThinkExtend.php
│ ├── ThinkFramework.php
│ └── ThinkTesting.php
├── version.json
└── web
├── assets
├── layer
│ ├── layer.js
│ ├── mobile
│ │ ├── layer.js
│ │ └── need
│ │ │ └── layer.css
│ └── theme
│ │ └── default
│ │ ├── icon-ext.png
│ │ ├── icon.png
│ │ ├── layer.css
│ │ ├── loading-0.gif
│ │ ├── loading-1.gif
│ │ └── loading-2.gif
└── store
│ ├── css
│ ├── amazeui.datatables.min.css
│ ├── amazeui.min.css
│ ├── app.css
│ ├── diy.css
│ ├── fullcalendar.min.css
│ ├── fullcalendar.print.css
│ ├── goods.css
│ └── login
│ │ └── style.css
│ ├── fonts
│ ├── FontAwesome.otf
│ ├── fontawesome-webfont.eot
│ ├── fontawesome-webfont.ttf
│ ├── fontawesome-webfont.woff
│ └── fontawesome-webfont.woff2
│ ├── i
│ └── favicon.ico
│ ├── img
│ ├── chose.png
│ ├── diy
│ │ ├── banner_01.jpg
│ │ └── banner_02.jpg
│ ├── login_bg.jpg
│ └── phone-top.png
│ ├── js
│ ├── amazeui.datatables.min.js
│ ├── amazeui.min.js
│ ├── app.js
│ ├── art-template.js
│ ├── dataTables.responsive.min.js
│ ├── ddsort.js
│ ├── delivery.js
│ ├── diy.js
│ ├── echarts.min.js
│ ├── file.library.js
│ ├── fullcalendar.min.js
│ ├── goods.spec.js
│ ├── jquery.dad.js
│ ├── jquery.form.min.js
│ ├── jquery.min.js
│ ├── moment.js
│ ├── test.js
│ └── webuploader.html5only.js
│ ├── plugins
│ └── umeditor
│ │ ├── dialogs
│ │ ├── emotion
│ │ │ ├── emotion.css
│ │ │ ├── emotion.js
│ │ │ └── images
│ │ │ │ ├── 0.gif
│ │ │ │ ├── bface.gif
│ │ │ │ ├── cface.gif
│ │ │ │ ├── fface.gif
│ │ │ │ ├── jxface2.gif
│ │ │ │ ├── neweditor-tab-bg.png
│ │ │ │ ├── tface.gif
│ │ │ │ ├── wface.gif
│ │ │ │ └── yface.gif
│ │ ├── formula
│ │ │ ├── formula.css
│ │ │ ├── formula.html
│ │ │ ├── formula.js
│ │ │ └── images
│ │ │ │ └── formula.png
│ │ ├── image
│ │ │ ├── image.css
│ │ │ ├── image.js
│ │ │ └── images
│ │ │ │ ├── close.png
│ │ │ │ ├── upload1.png
│ │ │ │ └── upload2.png
│ │ ├── link
│ │ │ └── link.js
│ │ ├── map
│ │ │ ├── map.html
│ │ │ └── map.js
│ │ └── video
│ │ │ ├── images
│ │ │ ├── center_focus.jpg
│ │ │ ├── left_focus.jpg
│ │ │ ├── none_focus.jpg
│ │ │ └── right_focus.jpg
│ │ │ ├── video.css
│ │ │ └── video.js
│ │ ├── lang
│ │ ├── en
│ │ │ ├── en.js
│ │ │ └── images
│ │ │ │ ├── addimage.png
│ │ │ │ ├── alldeletebtnhoverskin.png
│ │ │ │ ├── alldeletebtnupskin.png
│ │ │ │ ├── background.png
│ │ │ │ ├── button.png
│ │ │ │ ├── copy.png
│ │ │ │ ├── deletedisable.png
│ │ │ │ ├── deleteenable.png
│ │ │ │ ├── imglabel.png
│ │ │ │ ├── listbackground.png
│ │ │ │ ├── localimage.png
│ │ │ │ ├── music.png
│ │ │ │ ├── rotateleftdisable.png
│ │ │ │ ├── rotateleftenable.png
│ │ │ │ ├── rotaterightdisable.png
│ │ │ │ ├── rotaterightenable.png
│ │ │ │ └── upload.png
│ │ └── zh-cn
│ │ │ ├── images
│ │ │ ├── copy.png
│ │ │ ├── imglabel.png
│ │ │ ├── localimage.png
│ │ │ ├── music.png
│ │ │ └── upload.png
│ │ │ └── zh-cn.js
│ │ ├── themes
│ │ └── default
│ │ │ ├── css
│ │ │ ├── umeditor.css
│ │ │ └── umeditor.min.css
│ │ │ └── images
│ │ │ ├── caret.png
│ │ │ ├── close.png
│ │ │ ├── icons.gif
│ │ │ ├── icons.png
│ │ │ ├── ok.gif
│ │ │ ├── pop-bg.png
│ │ │ ├── spacer.gif
│ │ │ └── videologo.gif
│ │ ├── umeditor.config.js
│ │ ├── umeditor.js
│ │ └── umeditor.min.js
│ └── scss
│ ├── app.scss
│ ├── diy.scss
│ └── goods.scss
├── index.php
├── notice.php
└── uploads
└── .gitignore
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | composer.lock
3 | *.log
4 |
5 | *.css.map
6 | .sass-cache
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 萤火小程序商城(YoShop)
2 |
3 |
4 | #### 项目介绍
5 | 萤火小程序商城,是一款开源的电商系统,为中小企业提供最佳的新零售解决方案。采用稳定的MVC框架开发,执行效率、扩展性、稳定性值得信赖。
6 |
7 | #### 项目演示
8 | - 官网地址:[https://www.yiovo.com/](https://www.yiovo.com/)
9 | - 后台演示:[https://yoshop.xany6.com/](https://yoshop.xany6.com/)
10 | - QQ交流群:1055189864
11 |
12 | 
13 |
14 | #### 项目截图
15 | 
16 |
17 | #### 后台截图
18 | 
19 |
20 | 
21 |
22 | 
23 |
24 | 
25 |
26 | #### 环境要求
27 | - Nginx/Apache/IIS
28 | - PHP5.4+
29 | - MySQL5.1+
30 |
31 | 建议使用环境:Linux + Nginx1.14 + PHP7.1 + MySQL5.6
32 |
33 |
34 | #### 安全&缺陷
35 | 如果你发现了一个安全漏洞,请发送邮件到 developer@yiovo.com。所有的安全漏洞都将及时得到解决。
36 |
37 |
--------------------------------------------------------------------------------
/doc/database/upgrade/v1.0.10.sql:
--------------------------------------------------------------------------------
1 | ### v1.0.10 ###
2 |
3 | # 文件库记录表:分类排序
4 | ALTER TABLE `yoshop_upload_file`
5 | ADD COLUMN `group_id` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `file_id`,
6 | ADD COLUMN `is_delete` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 AFTER `extension`,
7 | MODIFY COLUMN `storage` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' AFTER `file_id`,
8 | MODIFY COLUMN `file_size` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `file_name`,
9 | MODIFY COLUMN `file_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' AFTER `file_size`,
10 | MODIFY COLUMN `create_time` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `wxapp_id`;
11 |
12 | # 文件库分组记录表
13 | CREATE TABLE `yoshop_upload_group` (
14 | `group_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
15 | `group_type` varchar(10) NOT NULL DEFAULT '',
16 | `group_name` varchar(30) NOT NULL DEFAULT '',
17 | `sort` int(11) unsigned NOT NULL DEFAULT '0',
18 | `wxapp_id` int(11) unsigned NOT NULL DEFAULT '0',
19 | `create_time` int(11) unsigned NOT NULL DEFAULT '0',
20 | `update_time` int(11) unsigned NOT NULL DEFAULT '0',
21 | PRIMARY KEY (`group_id`),
22 | KEY `type_index` (`group_type`)
23 | ) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8;
24 |
--------------------------------------------------------------------------------
/doc/database/upgrade/v1.0.14.sql:
--------------------------------------------------------------------------------
1 | ### v1.0.14 ###
2 |
3 | # 删除商品图片表索引
4 | ALTER TABLE `yoshop_goods_image` DROP INDEX `goods_image`;
5 |
--------------------------------------------------------------------------------
/doc/database/upgrade/v1.0.7.sql:
--------------------------------------------------------------------------------
1 | ### 1.0.7 ###
2 |
3 | # 新增短信设置
4 | INSERT INTO `yoshop_setting` VALUES ('sms', '短信设置', '{"default":"aliyun","engine":{"aliyun":{"AccessKeyId":"","AccessKeySecret":"","sign":"","order_pay":{"is_enable":"0","template_code":"","accept_phone":""}}}}', 10001, 1530265122);
5 |
--------------------------------------------------------------------------------
/doc/database/upgrade/v1.0.8.sql:
--------------------------------------------------------------------------------
1 | ### v1.0.8 ###
2 |
3 | # 订单商品记录表:库存计算方式
4 | ALTER TABLE `yoshop_order_goods`
5 | ADD COLUMN `deduct_stock_type` tinyint(3) UNSIGNED NOT NULL DEFAULT '20' AFTER `image_id`;
6 |
--------------------------------------------------------------------------------
/doc/database/upgrade/v1.0.9.sql:
--------------------------------------------------------------------------------
1 | ### v1.0.9 ###
2 |
3 | # 商品分类表:分类排序
4 | ALTER TABLE `yoshop_category`
5 | ADD COLUMN `sort` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `image_id`;
6 |
--------------------------------------------------------------------------------
/doc/安装教程.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/doc/安装教程.docx
--------------------------------------------------------------------------------
/icon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/icon.jpg
--------------------------------------------------------------------------------
/source/application/api/config.php:
--------------------------------------------------------------------------------
1 | 'json',
6 | ];
--------------------------------------------------------------------------------
/source/application/api/controller/Category.php:
--------------------------------------------------------------------------------
1 | getList($this->request->param());
26 | return $this->renderSuccess(compact('categoryList', 'goodsList'));
27 | }
28 |
29 | /**
30 | * 全部分类
31 | * @return array
32 | */
33 | public function lists()
34 | {
35 | $list = array_values(CategoryModel::getCacheTree());
36 | return $this->renderSuccess(compact('list'));
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/source/application/api/controller/Goods.php:
--------------------------------------------------------------------------------
1 | request->param(), [
23 | 'status' => 10
24 | ]);
25 | // 获取列表数据
26 | $model = new GoodsModel;
27 | $list = $model->getList($param);
28 | return $this->renderSuccess(compact('list'));
29 | }
30 |
31 | /**
32 | * 获取商品详情
33 | * @param $goods_id
34 | * @return array
35 | * @throws \think\exception\DbException
36 | */
37 | public function detail($goods_id)
38 | {
39 | // 商品详情
40 | $detail = GoodsModel::detail($goods_id);
41 | if (!$detail || $detail['goods_status']['value'] != 10) {
42 | return $this->renderError('很抱歉,商品信息不存在或已下架');
43 | }
44 | // 规格信息
45 | $specData = $detail['spec_type'] == 20 ? $detail->getManySpecData($detail['spec_rel'], $detail['spec']) : null;
46 | // $user = $this->getUser();
47 | // // 购物车商品总数量
48 | // $cart_total_num = (new CartModel($user['user_id']))->getTotalNum();
49 | return $this->renderSuccess(compact('detail', /*'cart_total_num',*/
50 | 'specData'));
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/source/application/api/controller/Index.php:
--------------------------------------------------------------------------------
1 | getNewList();
28 | // 猜您喜欢
29 | $best = $model->getBestList();
30 | return $this->renderSuccess(compact('items', 'newest', 'best'));
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/source/application/api/controller/User.php:
--------------------------------------------------------------------------------
1 | login($this->request->post());
25 | $token = $model->getToken();
26 | return $this->renderSuccess(compact('user_id', 'token'));
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/source/application/api/controller/Wxapp.php:
--------------------------------------------------------------------------------
1 | renderSuccess(compact('wxapp'));
25 | }
26 |
27 | /**
28 | * 帮助中心
29 | * @return array
30 | * @throws \think\db\exception\DataNotFoundException
31 | * @throws \think\db\exception\ModelNotFoundException
32 | * @throws \think\exception\DbException
33 | */
34 | public function help()
35 | {
36 | $model = new WxappHelp;
37 | $list = $model->getList();
38 | return $this->renderSuccess(compact('list'));
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/source/application/api/controller/user/Index.php:
--------------------------------------------------------------------------------
1 | getUser();
25 | // 订单总数
26 | $model = new OrderModel;
27 | $orderCount = [
28 | 'payment' => $model->getCount($userInfo['user_id'], 'payment'),
29 | 'delivery' => $model->getCount($userInfo['user_id'], 'delivery'),
30 | 'received' => $model->getCount($userInfo['user_id'], 'received'),
31 | ];
32 | return $this->renderSuccess(compact('userInfo', 'orderCount'));
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/source/application/api/model/Category.php:
--------------------------------------------------------------------------------
1 | code = $params['code'];
27 | }
28 | if (array_key_exists('msg', $params)) {
29 | $this->message = $params['msg'];
30 | }
31 | }
32 | }
33 |
34 |
--------------------------------------------------------------------------------
/source/application/common/exception/ExceptionHandler.php:
--------------------------------------------------------------------------------
1 | code = $e->code;
28 | $this->message = $e->message;
29 | } else {
30 | if (config('app_debug')) {
31 | return parent::render($e);
32 | }
33 | $this->code = 0;
34 | $this->message = $e->getMessage() ?: '很抱歉,服务器内部错误';
35 | $this->recordErrorLog($e);
36 | }
37 | return json(['msg' => $this->message, 'code' => $this->code]);
38 | }
39 |
40 | /**
41 | * 将异常写入日志
42 | * @param Exception $e
43 | */
44 | private function recordErrorLog(Exception $e)
45 | {
46 | Log::record($e->getMessage(), 'error');
47 | Log::record($e->getTraceAsString(), 'error');
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/source/application/common/library/sms/engine/Server.php:
--------------------------------------------------------------------------------
1 | error;
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/source/application/common/library/storage/engine/Local.php:
--------------------------------------------------------------------------------
1 | file->validate(['size' => 4 * 1024 * 1024, 'ext' => 'jpg,jpeg,png,gif'])
27 | ->move($uplodDir, $this->fileName);
28 | if (empty($info)) {
29 | $this->error = $this->file->getError();
30 | return false;
31 | }
32 | return true;
33 | }
34 |
35 | /**
36 | * 返回文件路径
37 | * @return mixed
38 | */
39 | public function getFileName()
40 | {
41 | return $this->fileName;
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/source/application/common/library/storage/engine/Qiniu.php:
--------------------------------------------------------------------------------
1 | config = $config;
27 | }
28 |
29 | /**
30 | * 执行上传
31 | * @return bool|mixed
32 | * @throws \Exception
33 | */
34 | public function upload()
35 | {
36 | // 要上传图片的本地路径
37 | $realPath = $this->file->getRealPath();
38 |
39 | // 构建鉴权对象
40 | $auth = new Auth($this->config['access_key'], $this->config['secret_key']);
41 |
42 | // 要上传的空间
43 | $token = $auth->uploadToken($this->config['bucket']);
44 |
45 | // 初始化 UploadManager 对象并进行文件的上传
46 | $uploadMgr = new UploadManager();
47 |
48 | // 调用 UploadManager 的 putFile 方法进行文件的上传
49 | list($result, $error) = $uploadMgr->putFile($token, $this->fileName, $realPath);
50 |
51 | if ($error !== null) {
52 | $this->error = $error->message();
53 | return false;
54 | }
55 | return true;
56 | }
57 |
58 | /**
59 | * 返回文件路径
60 | * @return mixed
61 | */
62 | public function getFileName()
63 | {
64 | return $this->fileName;
65 | }
66 |
67 | }
68 |
--------------------------------------------------------------------------------
/source/application/common/library/wechat/WxUser.php:
--------------------------------------------------------------------------------
1 | appId = $appId;
26 | $this->appSecret = $appSecret;
27 | }
28 |
29 | /**
30 | * 获取session_key
31 | * @param $code
32 | * @return array|mixed
33 | */
34 | public function sessionKey($code)
35 | {
36 | /**
37 | * code 换取 session_key
38 | * 这是一个 HTTPS 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。
39 | * 其中 session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。
40 | */
41 | $url = 'https://api.weixin.qq.com/sns/jscode2session';
42 | $result = json_decode(curl($url, [
43 | 'appid' => $this->appId,
44 | 'secret' => $this->appSecret,
45 | 'grant_type' => 'authorization_code',
46 | 'js_code' => $code
47 | ]), true);
48 | if (isset($result['errcode'])) {
49 | $this->error = $result['errmsg'];
50 | return false;
51 | }
52 | return $result;
53 | }
54 |
55 | public function getError()
56 | {
57 | return $this->error;
58 | }
59 |
60 | }
--------------------------------------------------------------------------------
/source/application/common/library/wechat/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/source/application/common/model/Delivery.php:
--------------------------------------------------------------------------------
1 | hasMany('DeliveryRule');
23 | }
24 |
25 | /**
26 | * 计费方式
27 | * @param $value
28 | * @return mixed
29 | */
30 | public function getMethodAttr($value)
31 | {
32 | $method = [10 => '按件数', 20 => '按重量'];
33 | return ['text' => $method[$value], 'value' => $value];
34 | }
35 |
36 | /**
37 | * 获取全部
38 | * @return mixed
39 | */
40 | public static function getAll()
41 | {
42 | $model = new static;
43 | return $model->order(['sort' => 'asc'])->select();
44 | }
45 |
46 | /**
47 | * 获取列表
48 | * @return \think\Paginator
49 | * @throws \think\exception\DbException
50 | */
51 | public function getList()
52 | {
53 | return $this->with(['rule'])
54 | ->order(['sort' => 'asc'])
55 | ->paginate(15, false, [
56 | 'query' => Request::instance()->request()
57 | ]);
58 | }
59 |
60 | /**
61 | * 运费模板详情
62 | * @param $delivery_id
63 | * @return null|static
64 | * @throws \think\exception\DbException
65 | */
66 | public static function detail($delivery_id)
67 | {
68 | return self::get($delivery_id, ['rule']);
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/source/application/common/model/DeliveryRule.php:
--------------------------------------------------------------------------------
1 | belongsTo('UploadFile', 'image_id', 'file_id')
22 | ->bind(['file_path', 'file_name', 'file_url']);
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/source/application/common/model/GoodsSpec.php:
--------------------------------------------------------------------------------
1 | belongsTo('Spec');
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/source/application/common/model/OrderAddress.php:
--------------------------------------------------------------------------------
1 | Region::getNameById($data['province_id']),
31 | 'city' => Region::getNameById($data['city_id']),
32 | 'region' => Region::getNameById($data['region_id']),
33 | ];
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/source/application/common/model/OrderGoods.php:
--------------------------------------------------------------------------------
1 | belongsTo('UploadFile', 'image_id', 'file_id');
22 | }
23 |
24 | /**
25 | * 关联商品表
26 | * @return \think\model\relation\BelongsTo
27 | */
28 | public function goods()
29 | {
30 | return $this->belongsTo('Goods');
31 | }
32 |
33 | /**
34 | * 关联商品规格表
35 | * @return \think\model\relation\BelongsTo
36 | */
37 | public function spec()
38 | {
39 | return $this->belongsTo('GoodsSpec', 'spec_sku_id', 'spec_sku_id');
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/source/application/common/model/Spec.php:
--------------------------------------------------------------------------------
1 | belongsTo('Spec');
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/source/application/common/model/StoreUser.php:
--------------------------------------------------------------------------------
1 | belongsTo('Wxapp');
20 | }
21 |
22 | /**
23 | * 新增默认商家用户信息
24 | * @param $wxapp_id
25 | * @return false|int
26 | */
27 | public function insertDefault($wxapp_id)
28 | {
29 | return $this->save([
30 | 'user_name' => 'yoshop_' . $wxapp_id,
31 | 'password' => md5(uniqid()),
32 | 'wxapp_id' => $wxapp_id,
33 | ]);
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/source/application/common/model/UploadFileUsed.php:
--------------------------------------------------------------------------------
1 | hasMany('UserAddress');
26 | }
27 |
28 | /**
29 | * 关联收货地址表 (默认地址)
30 | * @return \think\model\relation\BelongsTo
31 | */
32 | public function addressDefault()
33 | {
34 | return $this->belongsTo('UserAddress', 'address_id');
35 | }
36 |
37 | /**
38 | * 显示性别
39 | * @param $value
40 | * @return mixed
41 | */
42 | public function getGenderAttr($value)
43 | {
44 | return $this->gender[$value];
45 | }
46 |
47 | /**
48 | * 获取用户列表
49 | * @return \think\Paginator
50 | * @throws \think\exception\DbException
51 | */
52 | public function getList()
53 | {
54 | $request = Request::instance();
55 | return $this->order(['create_time' => 'desc'])
56 | ->paginate(15, false, ['query' => $request->request()]);
57 | }
58 |
59 | /**
60 | * 获取用户信息
61 | * @param $where
62 | * @return null|static
63 | * @throws \think\exception\DbException
64 | */
65 | public static function detail($where)
66 | {
67 | return self::get($where, ['address', 'addressDefault']);
68 | }
69 |
70 | }
71 |
--------------------------------------------------------------------------------
/source/application/common/model/UserAddress.php:
--------------------------------------------------------------------------------
1 | Region::getNameById($data['province_id']),
30 | 'city' => Region::getNameById($data['city_id']),
31 | 'region' => Region::getNameById($data['region_id']),
32 | ];
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/source/application/common/model/WxappHelp.php:
--------------------------------------------------------------------------------
1 | order(['sort' => 'asc'])->select();
24 | }
25 |
26 | /**
27 | * 帮助详情
28 | * @param $help_id
29 | * @return null|static
30 | * @throws \think\exception\DbException
31 | */
32 | public static function detail($help_id)
33 | {
34 | return self::get($help_id);
35 | }
36 |
37 | /**
38 | * 新增默认帮助
39 | * @param $wxapp_id
40 | * @return false|int
41 | */
42 | public function insertDefault($wxapp_id)
43 | {
44 | return $this->save([
45 | 'title' => '关于小程序',
46 | 'content' => '小程序本身无需下载,无需注册,不占用手机内存,可以跨平台使用,响应迅速,体验接近原生APP。',
47 | 'sort' => 100,
48 | 'wxapp_id'=> $wxapp_id
49 | ]);
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/source/application/common/model/WxappNavbar.php:
--------------------------------------------------------------------------------
1 | '#000000', 20 => '#ffffff'];
22 | return ['text' => $color[$value], 'value' => $value];
23 | }
24 |
25 | /**
26 | * 小程序导航栏详情
27 | * @return null|static
28 | * @throws \think\exception\DbException
29 | */
30 | public static function detail()
31 | {
32 | return self::get([]);
33 | }
34 |
35 | /**
36 | * 新增小程序导航栏默认设置
37 | * @param $wxapp_id
38 | * @param $wxapp_title
39 | * @return false|int
40 | */
41 | public function insertDefault($wxapp_id, $wxapp_title)
42 | {
43 | return $this->save([
44 | 'wxapp_title' => $wxapp_title,
45 | 'top_text_color' => 20,
46 | 'top_background_color' => '#fd4a5f',
47 | 'wxapp_id' => $wxapp_id
48 | ]);
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/source/application/database.php:
--------------------------------------------------------------------------------
1 | '127.0.0.1',
6 | 'database' => 'yoshop',
7 | 'username' => 'root',
8 | 'password' => 'root',
9 | 'port' => '3306',
10 | 'charset' => 'utf8',
11 | ];
12 |
13 | return [
14 | // 数据库类型
15 | 'type' => 'mysql',
16 | // 服务器地址
17 | 'hostname' => $config['host'],
18 | // 数据库名
19 | 'database' => $config['database'],
20 | // 用户名
21 | 'username' => $config['username'],
22 | // 密码
23 | 'password' => $config['password'],
24 | // 端口
25 | 'hostport' => $config['port'],
26 | // 连接dsn
27 | 'dsn' => '',
28 | // 数据库连接参数
29 | 'params' => [],
30 | // 数据库编码默认采用utf8
31 | 'charset' => $config['charset'],
32 | // 数据库表前缀
33 | 'prefix' => 'yoshop_',
34 | // 数据库调试模式
35 | 'debug' => true,
36 | // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
37 | 'deploy' => 0,
38 | // 数据库读写是否分离 主从式有效
39 | 'rw_separate' => false,
40 | // 读写分离后 主服务器数量
41 | 'master_num' => 1,
42 | // 指定从服务器序号
43 | 'slave_no' => '',
44 | // 是否严格检查字段是否存在
45 | 'fields_strict' => true,
46 | // 数据集返回类型
47 | 'resultset_type' => 'collection',
48 | // 自动写入时间戳字段
49 | 'auto_timestamp' => true,
50 | // 时间字段取出后的默认时间格式
51 | 'datetime_format' => 'Y-m-d H:i:s',
52 | // 是否需要进行SQL性能分析
53 | 'sql_explain' => false,
54 | ];
55 |
--------------------------------------------------------------------------------
/source/application/route.php:
--------------------------------------------------------------------------------
1 | [
8 | 'name' => '\w+',
9 | ],
10 | '[hello]' => [
11 | ':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
12 | ':name' => ['index/hello', ['method' => 'post']],
13 | ],
14 |
15 | ];
16 |
--------------------------------------------------------------------------------
/source/application/store/config.php:
--------------------------------------------------------------------------------
1 | 'html',
6 |
7 | 'template' => [
8 | // layout布局
9 | 'layout_on' => true,
10 | 'layout_name' => 'layouts/layout',
11 | // 模板引擎类型 支持 php think 支持扩展
12 | 'type' => 'think',
13 | // 模板路径
14 | 'view_path' => '',
15 | // 模板后缀
16 | 'view_suffix' => 'php',
17 | // 模板文件名分隔符
18 | 'view_depr' => DS,
19 | // 模板引擎普通标签开始标记
20 | 'tpl_begin' => '{{',
21 | // 模板引擎普通标签结束标记
22 | 'tpl_end' => '}}',
23 | // 标签库标签开始标记
24 | 'taglib_begin' => '{{',
25 | // 标签库标签结束标记
26 | 'taglib_end' => '}}',
27 | ],
28 | ];
29 |
--------------------------------------------------------------------------------
/source/application/store/controller/Index.php:
--------------------------------------------------------------------------------
1 | fetch('index');
14 | }
15 |
16 | public function demolist()
17 | {
18 | return $this->fetch('demo-list');
19 | }
20 |
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/source/application/store/controller/Passport.php:
--------------------------------------------------------------------------------
1 | request->isAjax()) {
25 | $model = new StoreUser;
26 | if ($model->login($this->postData('User'))) {
27 | return $this->renderSuccess('登录成功', url('index/index'));
28 | }
29 | return $this->renderError($model->getError() ?: '登录失败');
30 | }
31 | $this->view->engine->layout(false);
32 | return $this->fetch('login');
33 | }
34 |
35 | /**
36 | * 退出登录
37 | */
38 | public function logout()
39 | {
40 | Session::clear('yoshop_store');
41 | $this->redirect('passport/login');
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/source/application/store/controller/User.php:
--------------------------------------------------------------------------------
1 | getList();
23 | return $this->fetch('index', compact('list'));
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/source/application/store/controller/Wxapp.php:
--------------------------------------------------------------------------------
1 | request->isAjax()) {
24 | $data = $this->postData('wxapp');
25 | if ($wxapp->edit($data)) return $this->renderSuccess('更新成功');
26 | return $this->renderError('更新失败');
27 | }
28 | return $this->fetch('setting', compact('wxapp'));
29 | }
30 |
31 | /**
32 | * 导航栏设置
33 | * @return array|mixed
34 | * @throws \think\exception\DbException
35 | */
36 | public function tabbar() {
37 | $model = WxappNavbarModel::detail();
38 | if (!$this->request->isAjax()) {
39 | return $this->fetch('tabbar', compact('model'));
40 | }
41 | $data = $this->postData('tabbar');
42 | if (!$model->edit($data)) {
43 | return $this->renderError('更新失败');
44 | }
45 | return $this->renderSuccess('更新成功');
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/source/application/store/controller/store/User.php:
--------------------------------------------------------------------------------
1 | store['user']['store_user_id']);
23 | if ($this->request->isAjax()) {
24 | if ($model->renew($this->postData('user'))) {
25 | return $this->renderSuccess('更新成功');
26 | }
27 | return $this->renderError($model->getError() ?: '更新失败');
28 | }
29 | return $this->fetch('renew', compact('model'));
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/source/application/store/controller/wxapp/Page.php:
--------------------------------------------------------------------------------
1 | request->isAjax()) {
24 | $jsonData = $model['page_data']['json'];
25 | return $this->fetch('home', compact('jsonData'));
26 | }
27 | $data = $this->postData('data');
28 | if (!$model->edit($data)) {
29 | return $this->renderError('更新失败');
30 | }
31 | return $this->renderSuccess('更新成功');
32 | }
33 |
34 | /**
35 | * 页面链接
36 | * @return mixed
37 | */
38 | public function links()
39 | {
40 | return $this->fetch('links');
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/source/application/store/model/DeliveryRule.php:
--------------------------------------------------------------------------------
1 | $citys) {
43 | $str .= self::$regionTree[$provinceId]['name'];
44 | if (count($citys) !== count(self::$regionTree[$provinceId]['city'])) {
45 | $cityStr = '';
46 | foreach ($citys as $cityId)
47 | $cityStr .= self::$regionTree[$provinceId]['city'][$cityId]['name'];
48 | $str .= ' (' . mb_substr($cityStr, 0, -1, 'utf-8') . ')';
49 | }
50 | $str .= '、';
51 | }
52 | return mb_substr($str, 0, -1, 'utf-8');
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/source/application/store/model/GoodsImage.php:
--------------------------------------------------------------------------------
1 | with(['goods.image', 'address', 'user'])
24 | ->where($filter)
25 | ->order(['create_time' => 'desc'])->paginate(10, false, [
26 | 'query' => Request::instance()->request()
27 | ]);
28 | }
29 |
30 | /**
31 | * 确认发货
32 | * @param $data
33 | * @return bool|false|int
34 | */
35 | public function delivery($data)
36 | {
37 | if ($this['pay_status']['value'] == 10
38 | || $this['delivery_status']['value'] == 20) {
39 | $this->error = '该订单不合法';
40 | return false;
41 | }
42 | return $this->save([
43 | 'express_company' => $data['express_company'],
44 | 'express_no' => $data['express_no'],
45 | 'delivery_status' => 20,
46 | 'delivery_time' => time(),
47 | ]);
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/source/application/store/model/OrderAddress.php:
--------------------------------------------------------------------------------
1 | '短信通知',
21 | 'storage' => '上传设置',
22 | 'store' => '商城设置',
23 | 'trade' => '交易设置',
24 | ];
25 |
26 | /**
27 | * 更新系统设置
28 | * @param $key
29 | * @param $values
30 | * @return bool
31 | * @throws \think\exception\DbException
32 | */
33 | public function edit($key, $values)
34 | {
35 | $model = self::detail($key) ?: $this;
36 | // 删除系统设置缓存
37 | Cache::rm('setting_' . self::$wxapp_id);
38 | return $model->save([
39 | 'key' => $key,
40 | 'describe' => $this->describe[$key],
41 | 'values' => $values,
42 | 'wxapp_id' => self::$wxapp_id,
43 | ]) !== false;
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/source/application/store/model/Spec.php:
--------------------------------------------------------------------------------
1 | value('spec_id');
22 | }
23 |
24 | /**
25 | * 新增规格组
26 | * @param $spec_name
27 | * @return false|int
28 | */
29 | public function add($spec_name)
30 | {
31 | $wxapp_id = self::$wxapp_id;
32 | return $this->save(compact('spec_name', 'wxapp_id'));
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/source/application/store/model/SpecValue.php:
--------------------------------------------------------------------------------
1 | value('spec_value_id');
24 | }
25 |
26 | /**
27 | * 新增规格值
28 | * @param $spec_id
29 | * @param $spec_value
30 | * @return false|int
31 | */
32 | public function add($spec_id, $spec_value)
33 | {
34 | $wxapp_id = self::$wxapp_id;
35 | return $this->save(compact('spec_value', 'spec_id', 'wxapp_id'));
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/source/application/store/model/UploadFile.php:
--------------------------------------------------------------------------------
1 | save($data);
23 | }
24 |
25 | /**
26 | * 批量软删除
27 | * @param $fileIds
28 | * @return $this
29 | */
30 | public function softDelete($fileIds)
31 | {
32 | return $this->where('file_id', 'in', $fileIds)->update(['is_delete' => 1]);
33 | }
34 |
35 | /**
36 | * 批量移动文件分组
37 | * @param $group_id
38 | * @param $fileIds
39 | * @return $this
40 | */
41 | public function moveGroup($group_id, $fileIds)
42 | {
43 | return $this->where('file_id', 'in', $fileIds)->update(compact('group_id'));
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/source/application/store/model/UploadFileUsed.php:
--------------------------------------------------------------------------------
1 | save($data);
23 | }
24 |
25 | /**
26 | * 移除记录
27 | * @param $from_type
28 | * @param $file_id
29 | * @param null $from_id
30 | * @return int
31 | */
32 | public function remove($from_type, $file_id, $from_id = null)
33 | {
34 | $where = compact('from_type', 'file_id');
35 | !is_null($from_id) && $where['from_id'] = $from_id;
36 | return $this->where($where)->delete();
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/source/application/store/model/UploadGroup.php:
--------------------------------------------------------------------------------
1 | where(compact('group_type'))->order(['sort' => 'asc'])->select();
25 | }
26 |
27 | /**
28 | * 添加新记录
29 | * @param $data
30 | * @return false|int
31 | */
32 | public function add($data)
33 | {
34 | $data['wxapp_id'] = self::$wxapp_id;
35 | $data['sort'] = 100;
36 | return $this->save($data);
37 | }
38 |
39 | /**
40 | * 更新记录
41 | * @param $data
42 | * @return bool|int
43 | */
44 | public function edit($data)
45 | {
46 | return $this->allowField(true)->save($data) !== false;
47 | }
48 |
49 | /**
50 | * 删除记录
51 | * @return int
52 | */
53 | public function remove()
54 | {
55 | // 更新该分组下的所有文件
56 | $model = new UploadFile;
57 | $model->where(['group_id' => $this['group_id']])->update(['group_id' => 0]);
58 | return $this->delete();
59 | }
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/source/application/store/model/User.php:
--------------------------------------------------------------------------------
1 | allowField(true)->save($data);
23 | }
24 |
25 | /**
26 | * 更新记录
27 | * @param $data
28 | * @return bool|int
29 | */
30 | public function edit($data)
31 | {
32 | return $this->allowField(true)->save($data) !== false;
33 | }
34 |
35 | /**
36 | * 删除记录
37 | * @return int
38 | */
39 | public function remove() {
40 | return $this->delete();
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/source/application/store/model/WxappNavbar.php:
--------------------------------------------------------------------------------
1 | save($data) !== false;
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/source/application/store/model/WxappPage.php:
--------------------------------------------------------------------------------
1 | save(compact('page_data')) !== false;
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/source/application/store/view/index/index.php:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/source/application/store/view/layouts/_template/tpl_file_item.php:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/source/application/store/view/wxapp/page/tpl/diy.php:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
38 |
--------------------------------------------------------------------------------
/source/application/tags.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | // 应用行为扩展定义文件
13 | return [
14 | // 应用初始化
15 | 'app_init' => [],
16 | // 应用开始
17 | 'app_begin' => [],
18 | // 模块初始化
19 | 'module_init' => [],
20 | // 操作开始执行
21 | 'action_begin' => [],
22 | // 视图内容过滤
23 | 'view_filter' => [],
24 | // 日志写入
25 | 'log_write' => [],
26 | // 应用结束
27 | 'app_end' => [],
28 |
29 | // 订单处理
30 | 'order' => [
31 | 'app\\task\\behavior\\Order'
32 | ],
33 | ];
34 |
--------------------------------------------------------------------------------
/source/application/task/behavior/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/source/application/task/controller/Notify.php:
--------------------------------------------------------------------------------
1 | notify(new OrderModel);
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/source/application/task/model/Goods.php:
--------------------------------------------------------------------------------
1 | $goods['goods_id'],
28 | 'sales_actual' => ['inc', $goods['total_num']]
29 | ];
30 | $specData = [
31 | 'goods_spec_id' => $goods['goods_spec_id'],
32 | 'goods_sales' => ['inc', $goods['total_num']]
33 | ];
34 | // 付款减库存
35 | if ($goods['deduct_stock_type'] == 20) {
36 | $specData['stock_num'] = ['dec', $goods['total_num']];
37 | }
38 | $goodsSpecSave[] = $specData;
39 | }
40 | // 更新商品总销量
41 | $this->allowField(true)->isUpdate()->saveAll($goodsSave);
42 | // 更新商品规格库存
43 | (new GoodsSpec)->isUpdate()->saveAll($goodsSpecSave);
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/source/application/task/model/GoodsSpec.php:
--------------------------------------------------------------------------------
1 | $order_no, 'pay_status' => 10], ['goods']);
24 | }
25 |
26 | /**
27 | * 更新付款状态
28 | * @param $transaction_id
29 | * @return false|int
30 | * @throws \Exception
31 | */
32 | public function updatePayStatus($transaction_id)
33 | {
34 | Db::startTrans();
35 | // 更新商品库存、销量
36 | $GoodsModel = new Goods;
37 | $GoodsModel->updateStockSales($this['goods']);
38 | // 更新订单状态
39 | $this->save([
40 | 'pay_status' => 20,
41 | 'pay_time' => time(),
42 | 'transaction_id' => $transaction_id,
43 | ]);
44 | Db::commit();
45 | return true;
46 | }
47 |
48 | }
49 |
--------------------------------------------------------------------------------
/source/application/task/model/OrderGoods.php:
--------------------------------------------------------------------------------
1 | =5.4.0",
20 | "ext-pdo": "*",
21 | "ext-curl": "*",
22 | "ext-json": "*",
23 | "ext-bcmath": "*",
24 | "ext-gd": "*",
25 | "ext-openssl": "*",
26 | "ext-libxml": "*",
27 | "ext-simplexml": "*",
28 | "ext-zlib": "*",
29 | "ext-com": "*",
30 | "topthink/framework": "5.0.*",
31 | "qiniu/php-sdk": "^7.2"
32 | },
33 | "autoload": {
34 | "psr-4": {
35 | "app\\": "application"
36 | }
37 | },
38 | "extra": {
39 | "think-path": "thinkphp"
40 | },
41 | "config": {
42 | "preferred-install": "dist"
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/source/runtime/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/source/thinkphp/.gitignore:
--------------------------------------------------------------------------------
1 | /composer.lock
2 | /vendor
3 | .idea
4 | .DS_Store
5 |
--------------------------------------------------------------------------------
/source/thinkphp/.htaccess:
--------------------------------------------------------------------------------
1 | deny from all
--------------------------------------------------------------------------------
/source/thinkphp/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: false
2 |
3 | language: php
4 |
5 | services:
6 | - memcached
7 | - mongodb
8 | - mysql
9 | - postgresql
10 | - redis-server
11 |
12 | matrix:
13 | fast_finish: true
14 | include:
15 | - php: 5.4
16 | - php: 5.5
17 | - php: 5.6
18 | - php: 7.0
19 | - php: hhvm
20 | allow_failures:
21 | - php: hhvm
22 |
23 | cache:
24 | directories:
25 | - $HOME/.composer/cache
26 |
27 | before_install:
28 | - composer self-update
29 | - mysql -e "create database IF NOT EXISTS test;" -uroot
30 | - psql -c 'DROP DATABASE IF EXISTS test;' -U postgres
31 | - psql -c 'create database test;' -U postgres
32 |
33 | install:
34 | - ./tests/script/install.sh
35 |
36 | script:
37 | ## LINT
38 | - find . -path ./vendor -prune -o -type f -name \*.php -exec php -l {} \;
39 | ## PHP Copy/Paste Detector
40 | - vendor/bin/phpcpd --verbose --exclude vendor ./ || true
41 | ## PHPLOC
42 | - vendor/bin/phploc --exclude vendor ./
43 | ## PHPUNIT
44 | - vendor/bin/phpunit --coverage-clover=coverage.xml --configuration=phpunit.xml
45 |
46 | after_success:
47 | - bash <(curl -s https://codecov.io/bash)
48 |
--------------------------------------------------------------------------------
/source/thinkphp/LICENSE.txt:
--------------------------------------------------------------------------------
1 |
2 | ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
3 | 版权所有Copyright © 2006-2017 by ThinkPHP (http://thinkphp.cn)
4 | All rights reserved。
5 | ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
6 |
7 | Apache Licence是著名的非盈利开源组织Apache采用的协议。
8 | 该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,
9 | 允许代码修改,再作为开源或商业软件发布。需要满足
10 | 的条件:
11 | 1. 需要给代码的用户一份Apache Licence ;
12 | 2. 如果你修改了代码,需要在被修改的文件中说明;
13 | 3. 在延伸的代码中(修改和有源代码衍生的代码中)需要
14 | 带有原来代码中的协议,商标,专利声明和其他原来作者规
15 | 定需要包含的说明;
16 | 4. 如果再发布的产品中包含一个Notice文件,则在Notice文
17 | 件中需要带有本协议内容。你可以在Notice中增加自己的
18 | 许可,但不可以表现为对Apache Licence构成更改。
19 | 具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0
20 |
21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 | COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 | ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 | POSSIBILITY OF SUCH DAMAGE.
33 |
--------------------------------------------------------------------------------
/source/thinkphp/codecov.yml:
--------------------------------------------------------------------------------
1 | comment:
2 | layout: header, changes, diff
3 | coverage:
4 | ignore:
5 | - base.php
6 | - helper.php
7 | - convention.php
8 | - lang/zh-cn.php
9 | - start.php
10 | - console.php
11 | status:
12 | patch: false
13 |
--------------------------------------------------------------------------------
/source/thinkphp/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "topthink/framework",
3 | "description": "the new thinkphp framework",
4 | "type": "think-framework",
5 | "keywords": [
6 | "framework",
7 | "thinkphp",
8 | "ORM"
9 | ],
10 | "homepage": "http://thinkphp.cn/",
11 | "license": "Apache-2.0",
12 | "authors": [
13 | {
14 | "name": "liu21st",
15 | "email": "liu21st@gmail.com"
16 | }
17 | ],
18 | "require": {
19 | "php": ">=5.4.0",
20 | "topthink/think-installer": "~1.0"
21 | },
22 | "require-dev": {
23 | "phpunit/phpunit": "4.8.*",
24 | "johnkary/phpunit-speedtrap": "^1.0",
25 | "mikey179/vfsStream": "~1.6",
26 | "phploc/phploc": "2.*",
27 | "sebastian/phpcpd": "2.*",
28 | "phpdocumentor/reflection-docblock": "^2.0"
29 | },
30 | "autoload": {
31 | "psr-4": {
32 | "think\\": "library/think"
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/source/thinkphp/console.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think;
13 |
14 | // ThinkPHP 引导文件
15 | // 加载基础文件
16 | require __DIR__ . '/base.php';
17 |
18 | // 执行应用
19 | App::initCommon();
20 | Console::init();
21 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/Env.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think;
13 |
14 | class Env
15 | {
16 | /**
17 | * 获取环境变量值
18 | * @access public
19 | * @param string $name 环境变量名(支持二级 . 号分割)
20 | * @param string $default 默认值
21 | * @return mixed
22 | */
23 | public static function get($name, $default = null)
24 | {
25 | $result = getenv(ENV_PREFIX . strtoupper(str_replace('.', '_', $name)));
26 |
27 | if (false !== $result) {
28 | if ('false' === $result) {
29 | $result = false;
30 | } elseif ('true' === $result) {
31 | $result = true;
32 | }
33 |
34 | return $result;
35 | }
36 |
37 | return $default;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/Exception.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think;
13 |
14 | class Exception extends \Exception
15 | {
16 | /**
17 | * @var array 保存异常页面显示的额外 Debug 数据
18 | */
19 | protected $data = [];
20 |
21 | /**
22 | * 设置异常额外的 Debug 数据
23 | * 数据将会显示为下面的格式
24 | *
25 | * Exception Data
26 | * --------------------------------------------------
27 | * Label 1
28 | * key1 value1
29 | * key2 value2
30 | * Label 2
31 | * key1 value1
32 | * key2 value2
33 | *
34 | * @access protected
35 | * @param string $label 数据分类,用于异常页面显示
36 | * @param array $data 需要显示的数据,必须为关联数组
37 | * @return void
38 | */
39 | final protected function setData($label, array $data)
40 | {
41 | $this->data[$label] = $data;
42 | }
43 |
44 | /**
45 | * 获取异常额外 Debug 数据
46 | * 主要用于输出到异常页面便于调试
47 | * @access public
48 | * @return array
49 | */
50 | final public function getData()
51 | {
52 | return $this->data;
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/config/driver/Ini.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\config\driver;
13 |
14 | class Ini
15 | {
16 | public function parse($config)
17 | {
18 | if (is_file($config)) {
19 | return parse_ini_file($config, true);
20 | } else {
21 | return parse_ini_string($config, true);
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/config/driver/Json.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\config\driver;
13 |
14 | class Json
15 | {
16 | public function parse($config)
17 | {
18 | if (is_file($config)) {
19 | $config = file_get_contents($config);
20 | }
21 | $result = json_decode($config, true);
22 | return $result;
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/config/driver/Xml.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\config\driver;
13 |
14 | class Xml
15 | {
16 | public function parse($config)
17 | {
18 | if (is_file($config)) {
19 | $content = simplexml_load_file($config);
20 | } else {
21 | $content = simplexml_load_string($config);
22 | }
23 | $result = (array) $content;
24 | foreach ($result as $key => $val) {
25 | if (is_object($val)) {
26 | $result[$key] = (array) $val;
27 | }
28 | }
29 | return $result;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/console/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2004-2016 Fabien Potencier
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is furnished
8 | to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in all
11 | copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
--------------------------------------------------------------------------------
/source/thinkphp/library/think/console/bin/README.md:
--------------------------------------------------------------------------------
1 | console 工具使用 hiddeninput.exe 在 windows 上隐藏密码输入,该二进制文件由第三方提供,相关源码和其他细节可以在 [Hidden Input](https://github.com/Seldaek/hidden-input) 找到。
2 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/console/bin/hiddeninput.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/source/thinkphp/library/think/console/bin/hiddeninput.exe
--------------------------------------------------------------------------------
/source/thinkphp/library/think/console/command/make/Model.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\console\command\make;
13 |
14 | use think\console\command\Make;
15 |
16 | class Model extends Make
17 | {
18 | protected $type = "Model";
19 |
20 | protected function configure()
21 | {
22 | parent::configure();
23 | $this->setName('make:model')
24 | ->setDescription('Create a new model class');
25 | }
26 |
27 | protected function getStub()
28 | {
29 | return __DIR__ . '/stubs/model.stub';
30 | }
31 |
32 | protected function getNamespace($appNamespace, $module)
33 | {
34 | return parent::getNamespace($appNamespace, $module) . '\model';
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/console/command/make/stubs/controller.plain.stub:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\console\output\driver;
13 |
14 | use think\console\Output;
15 |
16 | class Buffer
17 | {
18 | /**
19 | * @var string
20 | */
21 | private $buffer = '';
22 |
23 | public function __construct(Output $output)
24 | {
25 | // do nothing
26 | }
27 |
28 | public function fetch()
29 | {
30 | $content = $this->buffer;
31 | $this->buffer = '';
32 | return $content;
33 | }
34 |
35 | public function write($messages, $newline = false, $options = Output::OUTPUT_NORMAL)
36 | {
37 | $messages = (array) $messages;
38 |
39 | foreach ($messages as $message) {
40 | $this->buffer .= $message;
41 | }
42 | if ($newline) {
43 | $this->buffer .= "\n";
44 | }
45 | }
46 |
47 | public function renderException(\Exception $e)
48 | {
49 | // do nothing
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/console/output/driver/Nothing.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\console\output\driver;
13 |
14 | use think\console\Output;
15 |
16 | class Nothing
17 | {
18 |
19 | public function __construct(Output $output)
20 | {
21 | // do nothing
22 | }
23 |
24 | public function write($messages, $newline = false, $options = Output::OUTPUT_NORMAL)
25 | {
26 | // do nothing
27 | }
28 |
29 | public function renderException(\Exception $e)
30 | {
31 | // do nothing
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/controller/Yar.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\controller;
13 |
14 | /**
15 | * ThinkPHP Yar控制器类
16 | */
17 | abstract class Yar
18 | {
19 |
20 | /**
21 | * 构造函数
22 | * @access public
23 | */
24 | public function __construct()
25 | {
26 | //控制器初始化
27 | if (method_exists($this, '_initialize')) {
28 | $this->_initialize();
29 | }
30 |
31 | //判断扩展是否存在
32 | if (!extension_loaded('yar')) {
33 | throw new \Exception('not support yar');
34 | }
35 |
36 | //实例化Yar_Server
37 | $server = new \Yar_Server($this);
38 | // 启动server
39 | $server->handle();
40 | }
41 |
42 | /**
43 | * 魔术方法 有不存在的操作的时候执行
44 | * @access public
45 | * @param string $method 方法名
46 | * @param array $args 参数
47 | * @return mixed
48 | */
49 | public function __call($method, $args)
50 | {}
51 | }
52 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/db/Expression.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\db;
13 |
14 | class Expression
15 | {
16 | /**
17 | * 查询表达式
18 | *
19 | * @var string
20 | */
21 | protected $value;
22 |
23 | /**
24 | * 创建一个查询表达式
25 | *
26 | * @param string $value
27 | * @return void
28 | */
29 | public function __construct($value)
30 | {
31 | $this->value = $value;
32 | }
33 |
34 | /**
35 | * 获取表达式
36 | *
37 | * @return string
38 | */
39 | public function getValue()
40 | {
41 | return $this->value;
42 | }
43 |
44 | public function __toString()
45 | {
46 | return (string) $this->value;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/db/exception/BindParamException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\db\exception;
13 |
14 | use think\exception\DbException;
15 |
16 | /**
17 | * PDO参数绑定异常
18 | */
19 | class BindParamException extends DbException
20 | {
21 |
22 | /**
23 | * BindParamException constructor.
24 | * @param string $message
25 | * @param array $config
26 | * @param string $sql
27 | * @param array $bind
28 | * @param int $code
29 | */
30 | public function __construct($message, $config, $sql, $bind, $code = 10502)
31 | {
32 | $this->setData('Bind Param', $bind);
33 | parent::__construct($message, $config, $sql, $code);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/db/exception/DataNotFoundException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\db\exception;
13 |
14 | use think\exception\DbException;
15 |
16 | class DataNotFoundException extends DbException
17 | {
18 | protected $table;
19 |
20 | /**
21 | * DbException constructor.
22 | * @param string $message
23 | * @param string $table
24 | * @param array $config
25 | */
26 | public function __construct($message, $table = '', array $config = [])
27 | {
28 | $this->message = $message;
29 | $this->table = $table;
30 |
31 | $this->setData('Database Config', $config);
32 | }
33 |
34 | /**
35 | * 获取数据表名
36 | * @access public
37 | * @return string
38 | */
39 | public function getTable()
40 | {
41 | return $this->table;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/db/exception/ModelNotFoundException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\db\exception;
13 |
14 | use think\exception\DbException;
15 |
16 | class ModelNotFoundException extends DbException
17 | {
18 | protected $model;
19 |
20 | /**
21 | * 构造方法
22 | * @param string $message
23 | * @param string $model
24 | */
25 | public function __construct($message, $model = '', array $config = [])
26 | {
27 | $this->message = $message;
28 | $this->model = $model;
29 |
30 | $this->setData('Database Config', $config);
31 | }
32 |
33 | /**
34 | * 获取模型类名
35 | * @access public
36 | * @return string
37 | */
38 | public function getModel()
39 | {
40 | return $this->model;
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/exception/ClassNotFoundException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\exception;
13 |
14 | class ClassNotFoundException extends \RuntimeException
15 | {
16 | protected $class;
17 | public function __construct($message, $class = '')
18 | {
19 | $this->message = $message;
20 | $this->class = $class;
21 | }
22 |
23 | /**
24 | * 获取类名
25 | * @access public
26 | * @return string
27 | */
28 | public function getClass()
29 | {
30 | return $this->class;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/exception/DbException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\exception;
13 |
14 | use think\Exception;
15 |
16 | /**
17 | * Database相关异常处理类
18 | */
19 | class DbException extends Exception
20 | {
21 | /**
22 | * DbException constructor.
23 | * @param string $message
24 | * @param array $config
25 | * @param string $sql
26 | * @param int $code
27 | */
28 | public function __construct($message, array $config, $sql, $code = 10500)
29 | {
30 | $this->message = $message;
31 | $this->code = $code;
32 |
33 | $this->setData('Database Status', [
34 | 'Error Code' => $code,
35 | 'Error Message' => $message,
36 | 'Error SQL' => $sql,
37 | ]);
38 |
39 | unset($config['username'], $config['password']);
40 | $this->setData('Database Config', $config);
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/exception/HttpException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\exception;
13 |
14 | class HttpException extends \RuntimeException
15 | {
16 | private $statusCode;
17 | private $headers;
18 |
19 | public function __construct($statusCode, $message = null, \Exception $previous = null, array $headers = [], $code = 0)
20 | {
21 | $this->statusCode = $statusCode;
22 | $this->headers = $headers;
23 |
24 | parent::__construct($message, $code, $previous);
25 | }
26 |
27 | public function getStatusCode()
28 | {
29 | return $this->statusCode;
30 | }
31 |
32 | public function getHeaders()
33 | {
34 | return $this->headers;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/exception/HttpResponseException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\exception;
13 |
14 | use think\Response;
15 |
16 | class HttpResponseException extends \RuntimeException
17 | {
18 | /**
19 | * @var Response
20 | */
21 | protected $response;
22 |
23 | public function __construct(Response $response)
24 | {
25 | $this->response = $response;
26 | }
27 |
28 | public function getResponse()
29 | {
30 | return $this->response;
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/exception/PDOException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\exception;
13 |
14 | /**
15 | * PDO异常处理类
16 | * 重新封装了系统的\PDOException类
17 | */
18 | class PDOException extends DbException
19 | {
20 | /**
21 | * PDOException constructor.
22 | * @param \PDOException $exception
23 | * @param array $config
24 | * @param string $sql
25 | * @param int $code
26 | */
27 | public function __construct(\PDOException $exception, array $config, $sql, $code = 10501)
28 | {
29 | $error = $exception->errorInfo;
30 |
31 | $this->setData('PDO Error Info', [
32 | 'SQLSTATE' => $error[0],
33 | 'Driver Error Code' => isset($error[1]) ? $error[1] : 0,
34 | 'Driver Error Message' => isset($error[2]) ? $error[2] : '',
35 | ]);
36 |
37 | parent::__construct($exception->getMessage(), $config, $sql, $code);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/exception/RouteNotFoundException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\exception;
13 |
14 | class RouteNotFoundException extends HttpException
15 | {
16 |
17 | public function __construct()
18 | {
19 | parent::__construct(404, 'Route Not Found');
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/exception/TemplateNotFoundException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\exception;
13 |
14 | class TemplateNotFoundException extends \RuntimeException
15 | {
16 | protected $template;
17 |
18 | public function __construct($message, $template = '')
19 | {
20 | $this->message = $message;
21 | $this->template = $template;
22 | }
23 |
24 | /**
25 | * 获取模板文件
26 | * @access public
27 | * @return string
28 | */
29 | public function getTemplate()
30 | {
31 | return $this->template;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/exception/ThrowableError.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\exception;
13 |
14 | class ThrowableError extends \ErrorException
15 | {
16 | public function __construct(\Throwable $e)
17 | {
18 |
19 | if ($e instanceof \ParseError) {
20 | $message = 'Parse error: ' . $e->getMessage();
21 | $severity = E_PARSE;
22 | } elseif ($e instanceof \TypeError) {
23 | $message = 'Type error: ' . $e->getMessage();
24 | $severity = E_RECOVERABLE_ERROR;
25 | } else {
26 | $message = 'Fatal error: ' . $e->getMessage();
27 | $severity = E_ERROR;
28 | }
29 |
30 | parent::__construct(
31 | $message,
32 | $e->getCode(),
33 | $severity,
34 | $e->getFile(),
35 | $e->getLine()
36 | );
37 |
38 | $this->setTrace($e->getTrace());
39 | }
40 |
41 | protected function setTrace($trace)
42 | {
43 | $traceReflector = new \ReflectionProperty('Exception', 'trace');
44 | $traceReflector->setAccessible(true);
45 | $traceReflector->setValue($this, $trace);
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/exception/ValidateException.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\exception;
13 |
14 | class ValidateException extends \RuntimeException
15 | {
16 | protected $error;
17 |
18 | public function __construct($error)
19 | {
20 | $this->error = $error;
21 | $this->message = is_array($error) ? implode("\n\r", $error) : $error;
22 | }
23 |
24 | /**
25 | * 获取验证错误信息
26 | * @access public
27 | * @return array|string
28 | */
29 | public function getError()
30 | {
31 | return $this->error;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/log/driver/Test.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\log\driver;
13 |
14 | /**
15 | * 模拟测试输出
16 | */
17 | class Test
18 | {
19 | /**
20 | * 日志写入接口
21 | * @access public
22 | * @param array $log 日志信息
23 | * @return bool
24 | */
25 | public function save(array $log = [])
26 | {
27 | return true;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/model/Pivot.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\model;
13 |
14 | use think\Model;
15 |
16 | class Pivot extends Model
17 | {
18 |
19 | /** @var Model */
20 | public $parent;
21 |
22 | protected $autoWriteTimestamp = false;
23 |
24 | /**
25 | * 架构函数
26 | * @access public
27 | * @param array|object $data 数据
28 | * @param Model $parent 上级模型
29 | * @param string $table 中间数据表名
30 | */
31 | public function __construct($data = [], Model $parent = null, $table = '')
32 | {
33 | $this->parent = $parent;
34 |
35 | if (is_null($this->name)) {
36 | $this->name = $table;
37 | }
38 |
39 | parent::__construct($data);
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/process/exception/Failed.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\process\exception;
13 |
14 | use think\Process;
15 |
16 | class Failed extends \RuntimeException
17 | {
18 |
19 | private $process;
20 |
21 | public function __construct(Process $process)
22 | {
23 | if ($process->isSuccessful()) {
24 | throw new \InvalidArgumentException('Expected a failed process, but the given process was successful.');
25 | }
26 |
27 | $error = sprintf('The command "%s" failed.' . "\nExit Code: %s(%s)", $process->getCommandLine(), $process->getExitCode(), $process->getExitCodeText());
28 |
29 | if (!$process->isOutputDisabled()) {
30 | $error .= sprintf("\n\nOutput:\n================\n%s\n\nError Output:\n================\n%s", $process->getOutput(), $process->getErrorOutput());
31 | }
32 |
33 | parent::__construct($error);
34 |
35 | $this->process = $process;
36 | }
37 |
38 | public function getProcess()
39 | {
40 | return $this->process;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/source/thinkphp/library/think/response/Json.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think\response;
13 |
14 | use think\Response;
15 |
16 | class Json extends Response
17 | {
18 | // 输出参数
19 | protected $options = [
20 | 'json_encode_param' => JSON_UNESCAPED_UNICODE,
21 | ];
22 |
23 | protected $contentType = 'application/json';
24 |
25 | /**
26 | * 处理数据
27 | * @access protected
28 | * @param mixed $data 要处理的数据
29 | * @return mixed
30 | * @throws \Exception
31 | */
32 | protected function output($data)
33 | {
34 | try {
35 | // 返回JSON数据格式到客户端 包含状态信息
36 | $data = json_encode($data, $this->options['json_encode_param']);
37 |
38 | if ($data === false) {
39 | throw new \InvalidArgumentException(json_last_error_msg());
40 | }
41 |
42 | return $data;
43 | } catch (\Exception $e) {
44 | if ($e->getPrevious()) {
45 | throw $e->getPrevious();
46 | }
47 | throw $e;
48 | }
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/source/thinkphp/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/source/thinkphp/logo.png
--------------------------------------------------------------------------------
/source/thinkphp/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 | ./tests/thinkphp/
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | ./
23 |
24 | tests
25 | vendor
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/source/thinkphp/start.php:
--------------------------------------------------------------------------------
1 |
10 | // +----------------------------------------------------------------------
11 |
12 | namespace think;
13 |
14 | // ThinkPHP 引导文件
15 | // 1. 加载基础文件
16 | require __DIR__ . '/base.php';
17 |
18 | // 2. 执行应用
19 | App::run()->send();
20 |
--------------------------------------------------------------------------------
/source/thinkphp/tpl/default_index.tpl:
--------------------------------------------------------------------------------
1 | *{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px } :)
ThinkPHP V5
十年磨一剑 - 为API开发设计的高性能框架
[ V5.0 版本由 七牛云 独家赞助发布 ] ';
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/source/vendor/autoload.php:
--------------------------------------------------------------------------------
1 | $vendorDir . '/qiniu/php-sdk/src/Qiniu/functions.php',
10 | );
11 |
--------------------------------------------------------------------------------
/source/vendor/composer/autoload_namespaces.php:
--------------------------------------------------------------------------------
1 | array($vendorDir . '/topthink/think-installer/src'),
10 | 'think\\' => array($baseDir . '/thinkphp/library/think'),
11 | 'app\\' => array($baseDir . '/application'),
12 | 'Qiniu\\' => array($vendorDir . '/qiniu/php-sdk/src/Qiniu'),
13 | );
14 |
--------------------------------------------------------------------------------
/source/vendor/composer/autoload_static.php:
--------------------------------------------------------------------------------
1 | __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu/functions.php',
11 | );
12 |
13 | public static $prefixLengthsPsr4 = array (
14 | 't' =>
15 | array (
16 | 'think\\composer\\' => 15,
17 | 'think\\' => 6,
18 | ),
19 | 'a' =>
20 | array (
21 | 'app\\' => 4,
22 | ),
23 | 'Q' =>
24 | array (
25 | 'Qiniu\\' => 6,
26 | ),
27 | );
28 |
29 | public static $prefixDirsPsr4 = array (
30 | 'think\\composer\\' =>
31 | array (
32 | 0 => __DIR__ . '/..' . '/topthink/think-installer/src',
33 | ),
34 | 'think\\' =>
35 | array (
36 | 0 => __DIR__ . '/../..' . '/thinkphp/library/think',
37 | ),
38 | 'app\\' =>
39 | array (
40 | 0 => __DIR__ . '/../..' . '/application',
41 | ),
42 | 'Qiniu\\' =>
43 | array (
44 | 0 => __DIR__ . '/..' . '/qiniu/php-sdk/src/Qiniu',
45 | ),
46 | );
47 |
48 | public static function getInitializer(ClassLoader $loader)
49 | {
50 | return \Closure::bind(function () use ($loader) {
51 | $loader->prefixLengthsPsr4 = ComposerStaticInit34a41e2841af1a67f3ddef099fc7b348::$prefixLengthsPsr4;
52 | $loader->prefixDirsPsr4 = ComposerStaticInit34a41e2841af1a67f3ddef099fc7b348::$prefixDirsPsr4;
53 |
54 | }, null, ClassLoader::class);
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/.gitignore:
--------------------------------------------------------------------------------
1 | *.phar
2 | *.zip
3 | build/artifacts
4 | phpunit.xml
5 | phpunit.functional.xml
6 | .DS_Store
7 | .swp
8 | .build
9 | composer.lock
10 | vendor
11 | src/package.xml
12 | .idea/
13 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/.scrutinizer.yml:
--------------------------------------------------------------------------------
1 | filter:
2 | excluded_paths: [tests/*]
3 | checks:
4 | php:
5 | code_rating: true
6 | remove_extra_empty_lines: true
7 | remove_php_closing_tag: true
8 | remove_trailing_whitespace: true
9 | fix_use_statements:
10 | remove_unused: true
11 | preserve_multiple: false
12 | preserve_blanklines: true
13 | order_alphabetically: true
14 | fix_php_opening_tag: true
15 | fix_linefeed: true
16 | fix_line_ending: true
17 | fix_identation_4spaces: true
18 | fix_doc_comments: true
19 | tools:
20 | external_code_coverage:
21 | timeout: 1200
22 | runs: 3
23 | php_analyzer: true
24 | php_code_coverage: false
25 | php_code_sniffer:
26 | config:
27 | standard: PSR2
28 | filter:
29 | paths: ['src']
30 | php_loc:
31 | enabled: true
32 | excluded_dirs: [vendor, tests]
33 | php_cpd:
34 | enabled: true
35 | excluded_dirs: [vendor, tests]
36 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: false
2 | language: php
3 |
4 | php:
5 | - 5.4
6 | - 5.5
7 | - 5.6
8 | - 7.0
9 |
10 | before_script:
11 | - export QINIU_TEST_ENV="travis"
12 | - travis_retry composer self-update
13 | - travis_retry composer install --no-interaction --prefer-source --dev
14 |
15 | script:
16 | - ./vendor/bin/phpcs --standard=PSR2 src
17 | - ./vendor/bin/phpcs --standard=PSR2 examples
18 | - ./vendor/bin/phpcs --standard=PSR2 tests
19 | - ./vendor/bin/phpunit --coverage-text --coverage-clover=coverage.clover tests/Qiniu/Tests/
20 |
21 | after_script:
22 | - wget https://scrutinizer-ci.com/ocular.phar
23 | - php ocular.phar code-coverage:upload --format=php-clover coverage.clover
24 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # 贡献代码指南
2 |
3 | 我们非常欢迎大家来贡献代码,我们会向贡献者致以最诚挚的敬意。
4 |
5 | 一般可以通过在Github上提交[Pull Request](https://github.com/qiniu/php-sdk)来贡献代码。
6 |
7 | ## Pull Request要求
8 |
9 | - **[PSR-2 编码风格标准](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** 。要通过项目中的code sniffer检查。
10 |
11 | - **代码格式** 提交前 请按 ./vendor/bin/phpcbf --standard=PSR2 进行格式化。
12 |
13 | - **必须添加测试!** - 如果没有测试(单元测试、集成测试都可以),那么提交的补丁是不会通过的。
14 |
15 | - **记得更新文档** - 保证`README.md`以及其他相关文档及时更新,和代码的变更保持一致性。
16 |
17 | - **考虑我们的发布周期** - 我们的版本号会服从[SemVer v2.0.0](http://semver.org/),我们绝对不会随意变更对外的API。
18 |
19 | - **创建feature分支** - 最好不要从你的master分支提交 pull request。
20 |
21 | - **一个feature提交一个pull请求** - 如果你的代码变更了多个操作,那就提交多个pull请求吧。
22 |
23 | - **清晰的commit历史** - 保证你的pull请求的每次commit操作都是有意义的。如果你开发中需要执行多次的即时commit操作,那么请把它们放到一起再提交pull请求。
24 |
25 | ## 运行测试
26 |
27 | ``` bash
28 | ./vendor/bin/phpunit tests/Qiniu/Tests/
29 |
30 | ```
31 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Qiniu, Ltd.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/autoload.php:
--------------------------------------------------------------------------------
1 | =5.3.3"
17 | },
18 | "require-dev": {
19 | "phpunit/phpunit": "~4.0",
20 | "squizlabs/php_codesniffer": "~2.3"
21 | },
22 | "autoload": {
23 | "psr-4": {"Qiniu\\": "src/Qiniu"},
24 | "files": ["src/Qiniu/functions.php"]
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/docs/rtc/README.md:
--------------------------------------------------------------------------------
1 | # Rtc Streaming Cloud Server-Side Library For PHP
2 |
3 | ## Features
4 |
5 | - Appclient
6 | - [x] 创建房间: client->createApp()
7 | - [x] 查看房间: client->getApp()
8 | - [x] 删除房间: client->deleteApp()
9 | - [x] 生成房间token: client->appToken()
10 |
11 |
12 |
13 | ## Contents
14 |
15 | - [Installation](#installation)
16 | - [Usage](#usage)
17 | - [Configuration](#configuration)
18 | - [App](#app)
19 | - [Create a app](#create-a-app)
20 | - [Get a app](#get-a-app)
21 | - [Delete a app](#delete-a-app)
22 | - [Generate a app token](#generate-a-app-token)
23 |
24 |
25 | ## Usage
26 |
27 | ### App
28 |
29 | #### Create a app
30 |
31 | ```php
32 | $ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
33 | $sk = "xxxx";
34 | $auth = new Auth($ak, $sk);
35 | $client = new Qiniu\Rtc\AppClient($auth);
36 | $resp=$client->createApp("901","testApp");
37 | print_r($resp);
38 | ```
39 |
40 | #### Get an app
41 |
42 | ```php
43 | $ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
44 | $sk = "xxxx";
45 | $auth = new Auth($ak, $sk);
46 | $client = new Qiniu\Rtc\AppClient($auth);
47 | $resp=$client->getApp("deq02uhb6");
48 | print_r($resp);
49 | ```
50 |
51 | #### Delete an app
52 |
53 | ```php
54 | $ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
55 | $sk = "xxxx";
56 | $auth = new Auth($ak, $sk);
57 | $client = new Qiniu\Rtc\AppClient($auth);
58 | $resp=$client->deleteApp("deq02uhb6");
59 | print_r($resp);
60 | ```
61 |
62 | #### Generate an app token
63 |
64 | ```php
65 | $ak = "gwd_gV4gPKZZsmEOvAuNU1AcumicmuHooTfu64q5";
66 | $sk = "xxxx";
67 | $auth = new Auth($ak, $sk);
68 | $client = new Qiniu\Rtc\AppClient($auth);
69 | $resp=$client->appToken("deq02uhb6", "lfx", '1111', (time()+3600), 'user');
70 | print_r($resp);
71 | ```
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/docs/rtc/example.php:
--------------------------------------------------------------------------------
1 | createApp($hub, $title, $maxUsers);
16 | print_r($resp);
17 | // 获取app状态
18 | $resp = $client->getApp('dgdl5ge8y');
19 | print_r($resp);
20 | //修改app状态
21 | $mergePublishRtmp = null;
22 | $mergePublishRtmp['enable'] = true;
23 | $resp = $client->updateApp('dgdl5ge8y', $hub, $title, $maxUsers, $mergePublishRtmp);
24 | print_r($resp);
25 | //删除app
26 | $resp = $client->deleteApp('dgdl5ge8y');
27 | print_r($resp);
28 | //获取房间连麦的成员
29 | $resp=$client->listUser("dgbfvvzid", 'lfxl');
30 | print_r($resp);
31 | //剔除房间的连麦成员
32 | $resp=$client->kickUser("dgbfvvzid", 'lfx', "qiniu-f6e07b78-4dc8-45fb-a701-a9e158abb8e6");
33 | print_r($resp);
34 | // 列举房间
35 | $resp=$client->listActiveRooms("dgbfvvzid", 'lfx', null, null);
36 | print_r($resp);
37 | //鉴权的有效时间: 1个小时.
38 | $resp = $client->appToken("dgd4vecde", "lfxl", '1111', (time()+3600), 'user');
39 | print_r($resp);
40 | } catch (\Exception $e) {
41 | echo "Error:", $e, "\n";
42 | }
43 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/README.md:
--------------------------------------------------------------------------------
1 | # examples
2 |
3 | 这些 examples 旨在帮助你快速了解使用七牛的sdk。这些demo都是可以直接运行的, 但是在运行之前需要填上您自己的参数。
4 |
5 | 比如:
6 |
7 | * `$bucket` 需要填上您想操作的 [bucket名字](http://developer.qiniu.com/docs/v6/api/overview/concepts.html#bucket)。
8 | * `$accessKey` 和 `$secretKey` 可以在我们的[管理后台](https://portal.qiniu.com/setting/key)找到。
9 | * 在进行`视频转码`, `压缩文件`等异步操作时 需要使用到的队列名称也可以在我们[管理后台](https://portal.qiniu.com/mps/pipeline)新建。
10 |
11 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/cdn_get_bandwidth.php:
--------------------------------------------------------------------------------
1 | getBandwidthData(
29 | $domains,
30 | $startDate,
31 | $endDate,
32 | $granularity
33 | );
34 |
35 | if ($getBandwidthErr != null) {
36 | var_dump($getBandwidthErr);
37 | } else {
38 | echo "get bandwidth data success\n";
39 | print_r($bandwidthData);
40 | }
41 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/cdn_get_flux.php:
--------------------------------------------------------------------------------
1 | getFluxData($domains, $startDate, $endDate, $granularity);
29 | if ($getFluxErr != null) {
30 | var_dump($getFluxErr);
31 | } else {
32 | echo "get flux data success\n";
33 | print_r($fluxData);
34 | }
35 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/cdn_get_log_list.php:
--------------------------------------------------------------------------------
1 | getCdnLogList($domains, $logDate);
24 | if ($getLogErr != null) {
25 | var_dump($getLogErr);
26 | } else {
27 | echo "get cdn log list success\n";
28 | print_r($logListData);
29 | }
30 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/cdn_refresh_urls_dirs.php:
--------------------------------------------------------------------------------
1 | refreshUrlsAndDirs($urls, $dirs);
29 | if ($refreshErr != null) {
30 | var_dump($refreshErr);
31 | } else {
32 | echo "refresh request sent\n";
33 | print_r($refreshResult);
34 | }
35 |
36 | //如果只有刷新链接或者目录的需求,可以分布使用
37 |
38 | list($refreshResult, $refreshErr) = $cdnManager->refreshUrls($urls);
39 | if ($refreshErr != null) {
40 | var_dump($refreshErr);
41 | } else {
42 | echo "refresh request sent\n";
43 | print_r($refreshResult);
44 | }
45 |
46 | list($refreshResult, $refreshErr) = $cdnManager->refreshDirs($dirs);
47 | if ($refreshErr != null) {
48 | var_dump($refreshErr);
49 | } else {
50 | echo "refresh request sent\n";
51 | print_r($refreshResult);
52 | }
53 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/cdn_timestamp_antileech.php:
--------------------------------------------------------------------------------
1 | status($persistentId);
13 |
14 | if ($err) {
15 | print_r($err);
16 | } else {
17 | print_r($ret);
18 | }
19 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/pfop_mkzip.php:
--------------------------------------------------------------------------------
1 | execute($bucket, $key, $fops, $pipeline, $notify_url, $force);
34 |
35 | echo "\n====> pfop mkzip result: \n";
36 | if ($err != null) {
37 | var_dump($err);
38 | } else {
39 | echo "PersistentFop Id: $id\n";
40 |
41 | $res = "http://api.qiniu.com/status/get/prefop?id=$id";
42 | echo "Processing result: $res";
43 | }
44 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/pfop_vframe.php:
--------------------------------------------------------------------------------
1 | useHTTPS = true;
25 | $pfop = new PersistentFop($auth, $config);
26 |
27 | //要进行视频截图操作
28 | $fops = "vframe/jpg/offset/1/w/480/h/360/rotate/90|saveas/" .
29 | \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_480x360.jpg");
30 |
31 | list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force);
32 | echo "\n====> pfop avthumb result: \n";
33 | if ($err != null) {
34 | var_dump($err);
35 | } else {
36 | echo "PersistentFop Id: $id\n";
37 | }
38 |
39 | //查询转码的进度和状态
40 | list($ret, $err) = $pfop->status($id);
41 | echo "\n====> pfop avthumb status: \n";
42 | if ($err != null) {
43 | var_dump($err);
44 | } else {
45 | var_dump($ret);
46 | }
47 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/pfop_video_avthumb.php:
--------------------------------------------------------------------------------
1 | useHTTPS=true;
26 |
27 | $pfop = new PersistentFop($auth, $config);
28 |
29 | //要进行转码的转码操作。 http://developer.qiniu.com/docs/v6/api/reference/fop/av/avthumb.html
30 | $fops = "avthumb/mp4/s/640x360/vb/1.4m|saveas/" . \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_640x360.mp4");
31 |
32 | list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force);
33 | echo "\n====> pfop avthumb result: \n";
34 | if ($err != null) {
35 | var_dump($err);
36 | } else {
37 | echo "PersistentFop Id: $id\n";
38 | }
39 |
40 | //查询转码的进度和状态
41 | list($ret, $err) = $pfop->status($id);
42 | echo "\n====> pfop avthumb status: \n";
43 | if ($err != null) {
44 | var_dump($err);
45 | } else {
46 | var_dump($ret);
47 | }
48 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/pfop_watermark.php:
--------------------------------------------------------------------------------
1 | useHTTPS=true;
27 | $pfop = new PersistentFop($auth, $config);
28 |
29 | //需要添加水印的图片UrlSafeBase64
30 | //可以参考http://developer.qiniu.com/code/v6/api/dora-api/av/video-watermark.html
31 | $base64URL = Qiniu\base64_urlSafeEncode('http://devtools.qiniu.com/qiniu.png');
32 |
33 | //水印参数
34 | $fops = "avthumb/mp4/s/640x360/vb/1.4m/image/" . $base64URL . "|saveas/"
35 | . \Qiniu\base64_urlSafeEncode($bucket . ":qiniu_wm.mp4");
36 |
37 | list($id, $err) = $pfop->execute($bucket, $key, $fops, $pipeline, $notifyUrl, $force);
38 | echo "\n====> pfop avthumb result: \n";
39 | if ($err != null) {
40 | var_dump($err);
41 | } else {
42 | echo "PersistentFop Id: $id\n";
43 | }
44 |
45 | //查询转码的进度和状态
46 | list($ret, $err) = $pfop->status($id);
47 | echo "\n====> pfop avthumb status: \n";
48 | if ($err != null) {
49 | var_dump($err);
50 | } else {
51 | var_dump($ret);
52 | }
53 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/php-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/source/vendor/qiniu/php-sdk/examples/php-logo.png
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/prefop.php:
--------------------------------------------------------------------------------
1 | status($id);
24 | echo "\n====> pfop avthumb status: \n";
25 | if ($err != null) {
26 | var_dump($err);
27 | } else {
28 | var_dump($ret);
29 | }
30 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/pulpvideo.php:
--------------------------------------------------------------------------------
1 | 'pulp',
21 | 'params' => array(
22 | 'labels' => array(
23 | array(
24 | 'label' => "1",
25 | 'select' => 1,
26 | 'score' => 2,
27 | ),
28 | )
29 | )
30 | ),
31 | );
32 |
33 | $params = array();
34 | $params = array(
35 | 'async' => false,
36 | 'vframe' => array(
37 | 'mode' => 1,
38 | 'interval' => 8,
39 | )
40 | );
41 |
42 | $req = array();
43 | $req['data'] = $reqBody;
44 | $req['ops'] = $ops;
45 | $req['params'] = $params;
46 | $body = json_encode($req);
47 |
48 | $vid = "xxxx";
49 | list($ret, $err) = $argusManager->pulpVideo($body, $vid);
50 |
51 | if ($err !== null) {
52 | var_dump($err);
53 | } else {
54 | var_dump($ret);
55 | }
56 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/qetag.php:
--------------------------------------------------------------------------------
1 | 'video/x-mp4',
18 | 'qiniu.png' => 'image/x-png',
19 | 'qiniu.jpg' => 'image/x-jpg'
20 | );
21 |
22 | $ops = $bucketManager->buildBatchChangeMime($bucket, $keyMimePairs);
23 | list($ret, $err) = $bucketManager->batch($ops);
24 | if ($err) {
25 | print_r($err);
26 | } else {
27 | print_r($ret);
28 | }
29 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_batch_change_type.php:
--------------------------------------------------------------------------------
1 | buildBatchChangeType($bucket, $keyTypePairs);
29 | list($ret, $err) = $bucketManager->batch($ops);
30 | if ($err) {
31 | print_r($err);
32 | } else {
33 | print_r($ret);
34 | }
35 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_batch_copy.php:
--------------------------------------------------------------------------------
1 | buildBatchCopy($srcBucket, $keyPairs, $destBucket, true);
31 | list($ret, $err) = $bucketManager->batch($ops);
32 | if ($err) {
33 | print_r($err);
34 | } else {
35 | print_r($ret);
36 | }
37 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_batch_delete.php:
--------------------------------------------------------------------------------
1 | buildBatchDelete($bucket, $keys);
23 | list($ret, $err) = $bucketManager->batch($ops);
24 | if ($err) {
25 | print_r($err);
26 | } else {
27 | print_r($ret);
28 | }
29 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_batch_delete_after_days.php:
--------------------------------------------------------------------------------
1 | buildBatchDeleteAfterDays($bucket, $keyDayPairs);
29 | list($ret, $err) = $bucketManager->batch($ops);
30 | if ($err) {
31 | print_r($err);
32 | } else {
33 | print_r($ret);
34 | }
35 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_batch_move.php:
--------------------------------------------------------------------------------
1 | buildBatchMove($srcBucket, $keyPairs, $destBucket, true);
31 | list($ret, $err) = $bucketManager->batch($ops);
32 | if ($err) {
33 | print_r($err);
34 | } else {
35 | print_r($ret);
36 | }
37 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_batch_stat.php:
--------------------------------------------------------------------------------
1 | buildBatchStat($bucket, $keys);
23 | list($ret, $err) = $bucketManager->batch($ops);
24 | if ($err) {
25 | print_r($err);
26 | } else {
27 | print_r($ret);
28 | }
29 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_bucket_domains.php:
--------------------------------------------------------------------------------
1 | domains($bucket);
15 | if ($err) {
16 | print_r($err);
17 | } else {
18 | print_r($domains);
19 | }
20 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_buckets.php:
--------------------------------------------------------------------------------
1 | buckets(true);
15 | if ($err) {
16 | print_r($err);
17 | } else {
18 | print_r($buckets);
19 | }
20 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_change_mime.php:
--------------------------------------------------------------------------------
1 | changeMime($bucket, $key, $newMime);
18 | if ($err) {
19 | print_r($err);
20 | }
21 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_change_status.php:
--------------------------------------------------------------------------------
1 | changeStatus($bucket, $key, $status);
18 | if ($err) {
19 | print_r($err);
20 | }
21 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_change_type.php:
--------------------------------------------------------------------------------
1 | changeType($bucket, $key, $fileType);
18 | if ($err) {
19 | print_r($err);
20 | }
21 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_copy.php:
--------------------------------------------------------------------------------
1 | copy($srcBucket, $srcKey, $destBucket, $destKey, true);
20 | if ($err) {
21 | print_r($err);
22 | }
23 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_delete.php:
--------------------------------------------------------------------------------
1 | delete($bucket, $key);
15 | if ($err) {
16 | print_r($err);
17 | }
18 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_delete_after_days.php:
--------------------------------------------------------------------------------
1 | deleteAfterDays($bucket, $key, $days);
18 | if ($err) {
19 | print_r($err);
20 | }
21 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_download_urls.php:
--------------------------------------------------------------------------------
1 | /
13 | $baseUrl = 'http://if-pri.qiniudn.com/qiniu.png?imageView2/1/h/500';
14 | // 对链接进行签名
15 | $signedUrl = $auth->privateDownloadUrl($baseUrl);
16 |
17 | echo $signedUrl;
18 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_fetch.php:
--------------------------------------------------------------------------------
1 | fetch($url, $bucket, $key);
19 | echo "=====> fetch $url to bucket: $bucket key: $key\n";
20 | if ($err !== null) {
21 | var_dump($err);
22 | } else {
23 | print_r($ret);
24 | }
25 |
26 | // 不指定key时,以文件内容的hash作为文件名
27 | $key = null;
28 | list($ret, $err) = $bucketManager->fetch($url, $bucket, $key);
29 | echo "=====> fetch $url to bucket: $bucket key: $(etag)\n";
30 | if ($err !== null) {
31 | var_dump($err);
32 | } else {
33 | print_r($ret);
34 | }
35 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_move.php:
--------------------------------------------------------------------------------
1 | move($srcBucket, $srcKey, $destBucket, $destKey, true);
20 | if ($err) {
21 | print_r($err);
22 | }
23 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_prefetch.php:
--------------------------------------------------------------------------------
1 | prefetch($bucket, $key);
15 | if ($err) {
16 | print_r($err);
17 | }
18 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rs_stat.php:
--------------------------------------------------------------------------------
1 | stat($bucket, $key);
15 | if ($err) {
16 | print_r($err);
17 | } else {
18 | print_r($fileInfo);
19 | }
20 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rsf_list_bucket.php:
--------------------------------------------------------------------------------
1 | listFiles($bucket, $prefix, $marker, $limit, $delimiter);
30 | if ($err !== null) {
31 | echo "\n====> list file err: \n";
32 | var_dump($err);
33 | } else {
34 | $marker = null;
35 | if (array_key_exists('marker', $ret)) {
36 | $marker = $ret['marker'];
37 | }
38 | echo "Marker: $marker\n";
39 | echo "\nList Items====>\n";
40 | //var_dump($ret['items']);
41 | print('items count:' . count($ret['items']) . "\n");
42 | if (array_key_exists('commonPrefixes', $ret)) {
43 | print_r($ret['commonPrefixes']);
44 | }
45 | }
46 | } while (!empty($marker));
47 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/rsf_list_files.php:
--------------------------------------------------------------------------------
1 | listFiles($bucket, $prefix, $marker, $limit, $delimiter);
29 | if ($err !== null) {
30 | echo "\n====> list file err: \n";
31 | var_dump($err);
32 | } else {
33 | if (array_key_exists('marker', $ret)) {
34 | echo "Marker:" . $ret["marker"] . "\n";
35 | }
36 | echo "\nList Iterms====>\n";
37 | //var_dump($ret['items']);
38 | }
39 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/saveas.php:
--------------------------------------------------------------------------------
1 | :';//为生成缩略图的文件名
13 | //生成的值
14 | $encodedEntryURI = \Qiniu\base64_urlSafeEncode($entry);
15 |
16 | //使用SecretKey对新的下载URL进行HMAC1-SHA1签名
17 | $newurl = "78re52.com1.z0.glb.clouddn.com/resource/Ship.jpg?imageView2/2/w/200/h/200|saveas/" . $encodedEntryURI;
18 |
19 | $sign = hash_hmac("sha1", $newurl, $secretKey, true);
20 |
21 | //对签名进行URL安全的Base64编码
22 | $encodedSign = \Qiniu\base64_urlSafeEncode($sign);
23 | //最终得到的完整下载URL
24 | $finalURL = "http://" . $newurl . "/sign/" . $accessKey . ":" . $encodedSign;
25 |
26 | $callbackBody = file_get_contents("$finalURL");
27 |
28 | echo $callbackBody;
29 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/upload_and_callback.php:
--------------------------------------------------------------------------------
1 | 'http://your.domain.com/upload_verify_callback.php',
23 | 'callbackBody' => 'filename=$(fname)&filesize=$(fsize)'
24 | );
25 | $uptoken = $auth->uploadToken($bucket, null, 3600, $policy);
26 |
27 | //上传文件的本地路径
28 | $filePath = './php-logo.png';
29 |
30 | //指定 config
31 | // $uploadMgr = new UploadManager($config);
32 | $uploadMgr = new UploadManager();
33 |
34 | list($ret, $err) = $uploadMgr->putFile($uptoken, null, $filePath);
35 | echo "\n====> putFile result: \n";
36 | if ($err !== null) {
37 | var_dump($err);
38 | } else {
39 | var_dump($ret);
40 | }
41 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/upload_and_pfop.php:
--------------------------------------------------------------------------------
1 | $pfop,
27 | 'persistentNotifyUrl' => $notifyUrl,
28 | 'persistentPipeline' => $pipeline
29 | );
30 | $token = $auth->uploadToken($bucket, null, 3600, $policy);
31 |
32 | list($ret, $err) = $uploadMgr->putFile($token, null, $key);
33 | echo "\n====> putFile result: \n";
34 | if ($err !== null) {
35 | var_dump($err);
36 | } else {
37 | var_dump($ret);
38 | }
39 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/upload_mgr_init.php:
--------------------------------------------------------------------------------
1 | uploadToken($bucket);
16 |
17 | // 构建 UploadManager 对象
18 | $uploadMgr = new UploadManager();
19 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/upload_simple_file.php:
--------------------------------------------------------------------------------
1 | uploadToken($bucket);
20 |
21 | // 要上传文件的本地路径
22 | $filePath = './php-logo.png';
23 |
24 | // 上传到七牛后保存的文件名
25 | $key = 'my-php-logo.png';
26 |
27 | // 初始化 UploadManager 对象并进行文件的上传。
28 | $uploadMgr = new UploadManager();
29 |
30 | // 调用 UploadManager 的 putFile 方法进行文件的上传。
31 | list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
32 | echo "\n====> putFile result: \n";
33 | if ($err !== null) {
34 | var_dump($err);
35 | } else {
36 | var_dump($ret);
37 | }
38 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/examples/upload_verify_callback.php:
--------------------------------------------------------------------------------
1 | verifyCallback($contentType, $authorization, $url, $callbackBody);
25 |
26 | if ($isQiniuCallback) {
27 | $resp = array('ret' => 'success');
28 | } else {
29 | $resp = array('ret' => 'failed');
30 | }
31 |
32 | echo json_encode($resp);
33 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/phpunit.xml.dist:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 | tests
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/src/Qiniu/Http/Error.php:
--------------------------------------------------------------------------------
1 |
7 | * {"error" : "detailed error message"}
8 | *
9 | */
10 | final class Error
11 | {
12 | private $url;
13 | private $response;
14 |
15 | public function __construct($url, $response)
16 | {
17 | $this->url = $url;
18 | $this->response = $response;
19 | }
20 |
21 | public function code()
22 | {
23 | return $this->response->statusCode;
24 | }
25 |
26 | public function getResponse()
27 | {
28 | return $this->response;
29 | }
30 |
31 | public function message()
32 | {
33 | return $this->response->error;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/src/Qiniu/Http/Request.php:
--------------------------------------------------------------------------------
1 | method = strtoupper($method);
14 | $this->url = $url;
15 | $this->headers = $headers;
16 | $this->body = $body;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/src/Qiniu/Processing/Operation.php:
--------------------------------------------------------------------------------
1 | auth = $auth;
18 | $this->domain = $domain;
19 | $this->token_expire = $token_expire;
20 | }
21 |
22 |
23 | /**
24 | * 对资源文件进行处理
25 | *
26 | * @param $key 待处理的资源文件名
27 | * @param $fops string|array fop操作,多次fop操作以array的形式传入。
28 | * eg. imageView2/1/w/200/h/200, imageMogr2/thumbnail/!75px
29 | *
30 | * @return array 文件处理后的结果及错误。
31 | *
32 | * @link http://developer.qiniu.com/docs/v6/api/reference/fop/
33 | */
34 | public function execute($key, $fops)
35 | {
36 | $url = $this->buildUrl($key, $fops);
37 | $resp = Client::get($url);
38 | if (!$resp->ok()) {
39 | return array(null, new Error($url, $resp));
40 | }
41 | if ($resp->json() !== null) {
42 | return array($resp->json(), null);
43 | }
44 | return array($resp->body, null);
45 | }
46 |
47 | public function buildUrl($key, $fops, $protocol = 'http')
48 | {
49 | if (is_array($fops)) {
50 | $fops = implode('|', $fops);
51 | }
52 |
53 | $url = $protocol . "://$this->domain/$key?$fops";
54 | if ($this->auth !== null) {
55 | $url = $this->auth->privateDownloadUrl($url, $this->token_expire);
56 | }
57 |
58 | return $url;
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/test-env.sh:
--------------------------------------------------------------------------------
1 | export QINIU_ACCESS_KEY=xxx
2 | export QINIU_SECRET_KEY=xxx
3 | export QINIU_TEST_BUCKET=phpsdk
4 | export QINIU_TEST_DOMAIN=phpsdk.qiniudn.com
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/tests/Qiniu/Tests/Base64Test.php:
--------------------------------------------------------------------------------
1 | assertEquals($a, \Qiniu\base64_urlSafeDecode($b));
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/tests/Qiniu/Tests/CdnManagerTest.php:
--------------------------------------------------------------------------------
1 | cdnManager = new CdnManager($testAuth);
27 | $this->encryptKey = $timestampAntiLeechEncryptKey;
28 | $this->imgUrl = $customDomain . '/24.jpg';
29 | }
30 |
31 | public function testCreateTimestampAntiLeechUrl()
32 | {
33 |
34 | $signUrl = $this->cdnManager->createTimestampAntiLeechUrl($this->imgUrl, $this->encryptKey, 3600);
35 |
36 | $response = Client::get($signUrl);
37 | $this->assertEquals($response->statusCode, 200);
38 | $this->assertNull($response->error);
39 |
40 | $url2 = $this->imgUrl . '?imageInfo';
41 | $signUrl2 = $this->cdnManager->createTimestampAntiLeechUrl($url2, $this->encryptKey, 3600);
42 |
43 | $response = Client::get($signUrl2);
44 | $imgInfo = $response->json();
45 |
46 | $this->assertEquals($response->statusCode, 200);
47 | $this->assertEquals($imgInfo['size'], 2196145);
48 | $this->assertNull($response->error);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/tests/Qiniu/Tests/Crc32Test.php:
--------------------------------------------------------------------------------
1 | assertEquals('1352841281', $b);
13 | }
14 |
15 | public function testFile()
16 | {
17 | $b = \Qiniu\crc32_file(__file__);
18 | $c = \Qiniu\crc32_file(__file__);
19 | $this->assertEquals($c, $b);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/tests/Qiniu/Tests/DownloadTest.php:
--------------------------------------------------------------------------------
1 | privateDownloadUrl($base_url);
13 | $response = Client::get($private_url);
14 | $this->assertEquals(200, $response->statusCode);
15 | }
16 |
17 | public function testFop()
18 | {
19 | global $testAuth;
20 | $base_url = 'http://private-res.qiniudn.com/gogopher.jpg?exif';
21 | $private_url = $testAuth->privateDownloadUrl($base_url);
22 | $response = Client::get($private_url);
23 | $this->assertEquals(200, $response->statusCode);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/tests/Qiniu/Tests/EtagTest.php:
--------------------------------------------------------------------------------
1 | assertEquals('Fto5o-5ea0sNMlW_75VgGJCv2AcJ', $r);
14 | $this->assertNull($error);
15 | }
16 |
17 | public function testLess4M()
18 | {
19 | $file = qiniuTempFile(3 * 1024 * 1024);
20 | list($r, $error) = Etag::sum($file);
21 | unlink($file);
22 | $this->assertEquals('Fs5BpnAjRykYTg6o5E09cjuXrDkG', $r);
23 | $this->assertNull($error);
24 | }
25 |
26 | public function test4M()
27 | {
28 | $file = qiniuTempFile(4 * 1024 * 1024);
29 | list($r, $error) = Etag::sum($file);
30 | unlink($file);
31 | $this->assertEquals('FiuKULnybewpEnrfTmxjsxc-3dWp', $r);
32 | $this->assertNull($error);
33 | }
34 |
35 | public function testMore4M()
36 | {
37 | $file = qiniuTempFile(5 * 1024 * 1024);
38 | list($r, $error) = Etag::sum($file);
39 | unlink($file);
40 | $this->assertEquals('lhvyfIWMYFTq4s4alzlhXoAkqfVL', $r);
41 | $this->assertNull($error);
42 | }
43 |
44 | public function test8M()
45 | {
46 | $file = qiniuTempFile(8 * 1024 * 1024);
47 | list($r, $error) = Etag::sum($file);
48 | unlink($file);
49 | $this->assertEquals('lmRm9ZfGZ86bnMys4wRTWtJj9ClG', $r);
50 | $this->assertNull($error);
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/tests/Qiniu/Tests/FopTest.php:
--------------------------------------------------------------------------------
1 | execute('gogopher.jpg', 'exif');
13 | $this->assertNull($error);
14 | $this->assertNotNull($exif);
15 | }
16 |
17 | public function testExifPrivate()
18 | {
19 | global $testAuth;
20 | $fop = new Operation('private-res.qiniudn.com', $testAuth);
21 | list($exif, $error) = $fop->execute('noexif.jpg', 'exif');
22 | $this->assertNotNull($error);
23 | $this->assertNull($exif);
24 | }
25 |
26 | public function testbuildUrl()
27 | {
28 | $fops = 'imageView2/2/h/200';
29 | $fop = new Operation('testres.qiniudn.com');
30 | $url = $fop->buildUrl('gogopher.jpg', $fops);
31 | $this->assertEquals($url, 'http://testres.qiniudn.com/gogopher.jpg?imageView2/2/h/200');
32 |
33 | $fops = array('imageView2/2/h/200', 'imageInfo');
34 | $url = $fop->buildUrl('gogopher.jpg', $fops);
35 | $this->assertEquals($url, 'http://testres.qiniudn.com/gogopher.jpg?imageView2/2/h/200|imageInfo');
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/tests/Qiniu/Tests/HttpTest.php:
--------------------------------------------------------------------------------
1 | assertEquals($response->statusCode, 200);
12 | $this->assertNotNull($response->body);
13 | $this->assertNull($response->error);
14 | }
15 |
16 | public function testGetQiniu()
17 | {
18 | $response = Client::get('up.qiniu.com');
19 | $this->assertEquals(405, $response->statusCode);
20 | $this->assertNotNull($response->body);
21 | $this->assertNotNull($response->xReqId());
22 | $this->assertNotNull($response->xLog());
23 | $this->assertNotNull($response->error);
24 | }
25 |
26 | public function testPost()
27 | {
28 | $response = Client::post('baidu.com', null);
29 | $this->assertEquals($response->statusCode, 200);
30 | $this->assertNotNull($response->body);
31 | $this->assertNull($response->error);
32 | }
33 |
34 | public function testPostQiniu()
35 | {
36 | $response = Client::post('up.qiniu.com', null);
37 | $this->assertEquals($response->statusCode, 400);
38 | $this->assertNotNull($response->body);
39 | $this->assertNotNull($response->xReqId());
40 | $this->assertNotNull($response->xLog());
41 | $this->assertNotNull($response->error);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/source/vendor/qiniu/php-sdk/tests/bootstrap.php:
--------------------------------------------------------------------------------
1 | 0) {
38 | fseek($file, $size - 1);
39 | fwrite($file, ' ');
40 | }
41 | fclose($file);
42 | return $fileName;
43 | }
44 |
--------------------------------------------------------------------------------
/source/vendor/topthink/think-installer/.gitignore:
--------------------------------------------------------------------------------
1 | /.idea
2 | composer.lock
3 | /vendor
--------------------------------------------------------------------------------
/source/vendor/topthink/think-installer/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "topthink/think-installer",
3 | "type": "composer-plugin",
4 | "require": {
5 | "composer-plugin-api": "^1.0"
6 | },
7 | "require-dev": {
8 | "composer/composer": "1.0.*@dev"
9 | },
10 | "license": "Apache-2.0",
11 | "authors": [
12 | {
13 | "name": "yunwuxin",
14 | "email": "448901948@qq.com"
15 | }
16 | ],
17 | "autoload": {
18 | "psr-4": {
19 | "think\\composer\\": "src"
20 | }
21 | },
22 | "extra": {
23 | "class": "think\\composer\\Plugin"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/source/vendor/topthink/think-installer/src/Plugin.php:
--------------------------------------------------------------------------------
1 | getInstallationManager();
15 |
16 | //框架核心
17 | $manager->addInstaller(new ThinkFramework($io, $composer));
18 |
19 | //单元测试
20 | $manager->addInstaller(new ThinkTesting($io, $composer));
21 |
22 | //扩展
23 | $manager->addInstaller(new ThinkExtend($io, $composer));
24 |
25 | }
26 | }
--------------------------------------------------------------------------------
/version.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "1.0.15"
3 | }
4 |
--------------------------------------------------------------------------------
/web/assets/layer/theme/default/icon-ext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/layer/theme/default/icon-ext.png
--------------------------------------------------------------------------------
/web/assets/layer/theme/default/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/layer/theme/default/icon.png
--------------------------------------------------------------------------------
/web/assets/layer/theme/default/loading-0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/layer/theme/default/loading-0.gif
--------------------------------------------------------------------------------
/web/assets/layer/theme/default/loading-1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/layer/theme/default/loading-1.gif
--------------------------------------------------------------------------------
/web/assets/layer/theme/default/loading-2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/layer/theme/default/loading-2.gif
--------------------------------------------------------------------------------
/web/assets/store/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/web/assets/store/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/web/assets/store/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/web/assets/store/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/web/assets/store/fonts/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/fonts/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/web/assets/store/i/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/i/favicon.ico
--------------------------------------------------------------------------------
/web/assets/store/img/chose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/img/chose.png
--------------------------------------------------------------------------------
/web/assets/store/img/diy/banner_01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/img/diy/banner_01.jpg
--------------------------------------------------------------------------------
/web/assets/store/img/diy/banner_02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/img/diy/banner_02.jpg
--------------------------------------------------------------------------------
/web/assets/store/img/login_bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/img/login_bg.jpg
--------------------------------------------------------------------------------
/web/assets/store/img/phone-top.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/img/phone-top.png
--------------------------------------------------------------------------------
/web/assets/store/js/test.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/js/test.js
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/emotion/images/0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/emotion/images/0.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/emotion/images/bface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/emotion/images/bface.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/emotion/images/cface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/emotion/images/cface.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/emotion/images/fface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/emotion/images/fface.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/emotion/images/jxface2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/emotion/images/jxface2.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/emotion/images/neweditor-tab-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/emotion/images/neweditor-tab-bg.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/emotion/images/tface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/emotion/images/tface.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/emotion/images/wface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/emotion/images/wface.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/emotion/images/yface.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/emotion/images/yface.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/formula/formula.css:
--------------------------------------------------------------------------------
1 | .edui-popup-formula .edui-formula-wrapper {
2 | padding: 15px;
3 | }
4 | .edui-popup-formula .edui-formula-wrapper .edui-tab-nav{
5 | height: auto;
6 | *height: 31px;
7 | }
8 | .edui-popup-formula .edui-formula-wrapper .edui-tab-text {
9 | font-size: 12px;
10 | }
11 | .edui-popup-formula .edui-formula-wrapper .edui-formula-clearboth {
12 | clear: both;
13 | width: 0;
14 | height: 0;
15 | }
16 | .edui-popup-formula .edui-formula-wrapper .edui-tab-pane ul {
17 | margin: 0px;
18 | padding: 0px;
19 | }
20 | .edui-popup-formula .edui-formula-wrapper .edui-tab-content {
21 | padding: 5px 0px 0px 0px;
22 | }
23 | .edui-popup-formula .edui-formula-wrapper .edui-tab-pane .edui-formula-latex-item {
24 | display: block;
25 | float: left;
26 | margin: 0px 3px 3px 0px;
27 | width: 30px;
28 | height: 30px;
29 | border:1px solid #cccccc;
30 | background-image: url("images/formula.png");
31 | cursor: pointer;
32 | }
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/formula/images/formula.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/formula/images/formula.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/image/images/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/image/images/close.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/image/images/upload1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/image/images/upload1.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/image/images/upload2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/image/images/upload2.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/video/images/center_focus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/video/images/center_focus.jpg
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/video/images/left_focus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/video/images/left_focus.jpg
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/video/images/none_focus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/video/images/none_focus.jpg
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/dialogs/video/images/right_focus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/dialogs/video/images/right_focus.jpg
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/addimage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/addimage.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/alldeletebtnhoverskin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/alldeletebtnhoverskin.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/alldeletebtnupskin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/alldeletebtnupskin.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/background.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/button.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/copy.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/deletedisable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/deletedisable.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/deleteenable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/deleteenable.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/imglabel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/imglabel.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/listbackground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/listbackground.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/localimage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/localimage.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/music.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/rotateleftdisable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/rotateleftdisable.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/rotateleftenable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/rotateleftenable.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/rotaterightdisable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/rotaterightdisable.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/rotaterightenable.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/rotaterightenable.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/en/images/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/en/images/upload.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/zh-cn/images/copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/zh-cn/images/copy.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/zh-cn/images/imglabel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/zh-cn/images/imglabel.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/zh-cn/images/localimage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/zh-cn/images/localimage.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/zh-cn/images/music.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/zh-cn/images/music.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/lang/zh-cn/images/upload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/lang/zh-cn/images/upload.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/themes/default/images/caret.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/themes/default/images/caret.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/themes/default/images/close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/themes/default/images/close.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/themes/default/images/icons.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/themes/default/images/icons.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/themes/default/images/icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/themes/default/images/icons.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/themes/default/images/ok.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/themes/default/images/ok.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/themes/default/images/pop-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/themes/default/images/pop-bg.png
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/themes/default/images/spacer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/themes/default/images/spacer.gif
--------------------------------------------------------------------------------
/web/assets/store/plugins/umeditor/themes/default/images/videologo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/yiovo/yoshop/a000ef567e95d58e2af1f991a0e32de661ff8736/web/assets/store/plugins/umeditor/themes/default/images/videologo.gif
--------------------------------------------------------------------------------
/web/index.php:
--------------------------------------------------------------------------------
1 | 5.4.0 !');
7 | if (version_compare(PHP_VERSION, '7.4.0', '>=')) die('require PHP < 7.4.0 !');
8 |
9 | // 定义运行目录
10 | define('WEB_PATH', __DIR__ . '/');
11 |
12 | // 定义应用目录
13 | define('APP_PATH', WEB_PATH . '../source/application/');
14 |
15 | // 加载框架引导文件
16 | require APP_PATH . '../thinkphp/start.php';
17 |
--------------------------------------------------------------------------------
/web/notice.php:
--------------------------------------------------------------------------------
1 |