├── .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 | ![输入图片说明](https://images.gitee.com/uploads/images/2018/0727/210807_271acafd_597459.jpeg "gh_a376934c7da8_344.jpg") 13 | 14 | #### 项目截图 15 | ![输入图片说明](https://gitee.com/uploads/images/2018/0629/144738_39b279a7_597459.png "前端.png") 16 | 17 | #### 后台截图 18 | ![输入图片说明](https://gitee.com/uploads/images/2018/0629/144835_4e7858ef_597459.png "后台-商品列表.png") 19 | 20 | ![输入图片说明](https://gitee.com/uploads/images/2018/0629/144851_2a4c1e50_597459.png "后台-新增商品.png") 21 | 22 | ![输入图片说明](https://gitee.com/uploads/images/2018/0629/144952_acc1d20d_597459.png "后台-首页设计.png") 23 | 24 | ![输入图片说明](https://gitee.com/uploads/images/2018/0629/145004_5a5ba42c_597459.png "后台-配送设置.png") 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 |
2 |
3 |
4 |
5 |
6 |
Welcome To YoShop System
7 |
8 |

商城管理后台

9 |
10 |
11 |
12 |
13 |
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 |