├── .eslintrc.js ├── .github ├── FUNDING.yml └── workflows │ ├── phpunit.yml │ └── reuse.yml ├── .gitignore ├── .l10nignore ├── .scrutinizer.yml ├── .tx └── config ├── AGENTS.md ├── AUTHORS.md ├── CHANGELOG.md ├── LICENSE.md ├── LICENSES ├── AGPL-3.0-or-later.txt ├── Apache-2.0.txt ├── CC0-1.0.txt └── MIT.txt ├── README.md ├── REUSE.toml ├── analytics.code-workspace ├── appinfo ├── info.xml └── routes.php ├── composer.json ├── css ├── 3rdParty │ └── datatables.min.css ├── advanced.css ├── authenticate.css ├── dashboard.css ├── print.css ├── sharetabview.css ├── style.css └── wizard.css ├── img ├── add.svg ├── app-color.svg ├── app-dark.svg ├── app.svg ├── arrowDown.svg ├── arrowRight.svg ├── chartArea.svg ├── chartBar.svg ├── chartDonut.svg ├── chartFunnel.svg ├── chartLine.svg ├── chartNone.svg ├── chartTable.svg ├── chartTime.svg ├── chartoptions.svg ├── column.svg ├── copy.svg ├── dataset.svg ├── download.svg ├── favicon.png ├── filter.svg ├── filteradd.svg ├── filterremove.svg ├── forecast.svg ├── fullscreen.svg ├── fullscreenExit.svg ├── gripLines.svg ├── group.svg ├── infoIntro.svg ├── infoReport.svg ├── infoWiki.svg ├── logo.svg ├── more.svg ├── noReport.svg ├── options.svg ├── overview.svg ├── panorama.svg ├── pdf.svg ├── refresh.svg ├── report.svg ├── reset.svg ├── row.svg ├── save.svg ├── sort.svg ├── tableOptions.svg ├── timeAggregation.svg ├── translate.svg ├── warning.svg ├── wizard_charts.png ├── wizard_dataload.gif ├── wizard_datasources.gif └── wizard_filter.gif ├── js ├── 3rdParty │ ├── chart.umd.js │ ├── chartjs-adapter-moment.js │ ├── chartjs-plugin-colorschemes.min.js │ ├── chartjs-plugin-datalabels.min.js │ ├── chartjs-plugin-funnel.min.js │ ├── chartjs-plugin-zoom.min.js │ ├── cloner.js │ ├── datatables.min.js │ ├── html2canvas.min.js │ ├── jspdf.umd.min.js │ └── moment.min.js ├── advanced.js ├── app.js ├── appMin.js ├── authenticate.js ├── dashboard.js ├── filter.js ├── flow.js ├── navigation.js ├── panorama.js ├── reference.js ├── sidebar.js ├── userGuidance.js ├── viewer.js └── visualization.js ├── l10n ├── .gitkeep ├── af.js ├── af.json ├── ar.js ├── ar.json ├── ast.js ├── ast.json ├── az.js ├── az.json ├── be.js ├── be.json ├── bg.js ├── bg.json ├── bn_BD.js ├── bn_BD.json ├── br.js ├── br.json ├── bs.js ├── bs.json ├── ca.js ├── ca.json ├── cs.js ├── cs.json ├── cy_GB.js ├── cy_GB.json ├── da.js ├── da.json ├── de.js ├── de.json ├── de_DE.js ├── de_DE.json ├── el.js ├── el.json ├── en_GB.js ├── en_GB.json ├── eo.js ├── eo.json ├── es.js ├── es.json ├── es_419.js ├── es_419.json ├── es_AR.js ├── es_AR.json ├── es_CL.js ├── es_CL.json ├── es_CO.js ├── es_CO.json ├── es_CR.js ├── es_CR.json ├── es_DO.js ├── es_DO.json ├── es_EC.js ├── es_EC.json ├── es_GT.js ├── es_GT.json ├── es_HN.js ├── es_HN.json ├── es_MX.js ├── es_MX.json ├── es_NI.js ├── es_NI.json ├── es_PA.js ├── es_PA.json ├── es_PE.js ├── es_PE.json ├── es_PR.js ├── es_PR.json ├── es_PY.js ├── es_PY.json ├── es_SV.js ├── es_SV.json ├── es_UY.js ├── es_UY.json ├── et_EE.js ├── et_EE.json ├── eu.js ├── eu.json ├── fa.js ├── fa.json ├── fi.js ├── fi.json ├── fr.js ├── fr.json ├── ga.js ├── ga.json ├── gd.js ├── gd.json ├── gl.js ├── gl.json ├── he.js ├── he.json ├── hr.js ├── hr.json ├── hu.js ├── hu.json ├── hy.js ├── hy.json ├── ia.js ├── ia.json ├── id.js ├── id.json ├── is.js ├── is.json ├── it.js ├── it.json ├── ja.js ├── ja.json ├── ka.js ├── ka.json ├── ka_GE.js ├── ka_GE.json ├── kab.js ├── kab.json ├── km.js ├── km.json ├── kn.js ├── kn.json ├── ko.js ├── ko.json ├── lb.js ├── lb.json ├── lo.js ├── lo.json ├── lt_LT.js ├── lt_LT.json ├── lv.js ├── lv.json ├── mk.js ├── mk.json ├── mn.js ├── mn.json ├── ms_MY.js ├── ms_MY.json ├── nb.js ├── nb.json ├── nl.js ├── nl.json ├── nn_NO.js ├── nn_NO.json ├── oc.js ├── oc.json ├── pl.js ├── pl.json ├── pt_BR.js ├── pt_BR.json ├── pt_PT.js ├── pt_PT.json ├── ro.js ├── ro.json ├── ru.js ├── ru.json ├── sc.js ├── sc.json ├── si.js ├── si.json ├── sk.js ├── sk.json ├── sl.js ├── sl.json ├── sq.js ├── sq.json ├── sr.js ├── sr.json ├── sr@latin.js ├── sr@latin.json ├── sv.js ├── sv.json ├── ta.js ├── ta.json ├── th.js ├── th.json ├── tk.js ├── tk.json ├── tr.js ├── tr.json ├── ug.js ├── ug.json ├── uk.js ├── uk.json ├── uz.js ├── uz.json ├── vi.js ├── vi.json ├── zh_CN.js ├── zh_CN.json ├── zh_HK.js ├── zh_HK.json ├── zh_TW.js └── zh_TW.json ├── lib ├── Activity │ ├── ActivityManager.php │ ├── Filter.php │ ├── Provider.php │ ├── SettingData.php │ └── SettingDataset.php ├── AppInfo │ └── Application.php ├── BackgroundJob │ ├── Daily.php │ ├── EndOfDay.php │ ├── Hourly.php │ └── StartOfDay.php ├── Command │ └── Load.php ├── ContextChat │ ├── ContentProvider.php │ └── ContextChatManager.php ├── Controller │ ├── ApiDataController.php │ ├── DataloadController.php │ ├── DatasetController.php │ ├── DatasourceController.php │ ├── OutputController.php │ ├── PageController.php │ ├── PanoramaController.php │ ├── ReportController.php │ ├── ShareController.php │ ├── ThresholdController.php │ ├── WhatsNewController.php │ └── WizardController.php ├── Dashboard │ └── Widget.php ├── DataSession.php ├── Datasource │ ├── DatasourceEvent.php │ ├── ExternalCsv.php │ ├── ExternalJson.php │ ├── Github.php │ ├── IDatasource.php │ ├── LocalCsv.php │ ├── LocalJson.php │ ├── LocalSpreadsheet.php │ └── Regex.php ├── Db │ ├── DataloadMapper.php │ ├── DatasetMapper.php │ ├── PanoramaMapper.php │ ├── ReportMapper.php │ ├── ShareMapper.php │ ├── StorageMapper.php │ └── ThresholdMapper.php ├── Flow │ ├── Operation.php │ └── RegisterOperationsListener.php ├── Listener │ ├── LoadAdditionalScripts.php │ ├── ReferenceListener.php │ └── UserDeletedListener.php ├── Migration │ ├── Version3005Date20210508180000.php │ ├── Version3006Date20210601200000.php │ ├── Version3007Date20211003180000.php │ ├── Version4001Date20220317190000.php │ ├── Version4006Date20221222190000.php │ ├── Version4009Date20230410190000.php │ ├── Version4009Date20230517190000.php │ ├── Version4010Date20230815190000.php │ ├── Version4010Date20230815200000.php │ ├── Version4011Date20231001190000.php │ ├── Version4012Date20231108180000.php │ ├── Version4013Date20240408180000.php │ ├── Version4015Date20240714200000.php │ ├── Version5000Date20240915190000.php │ ├── Version5001Date20240916100000.php │ ├── Version5002Date20241022100000.php │ ├── Version5004Date20250429100000.php │ └── Version5005Date20250520100000.php ├── Notification │ ├── NotificationManager.php │ └── Notifier.php ├── Reference │ └── ReferenceProvider.php ├── Search │ └── SearchProvider.php ├── Service │ ├── DataloadService.php │ ├── DatasetService.php │ ├── PanoramaService.php │ ├── ReportService.php │ ├── ShareService.php │ ├── StorageService.php │ ├── ThresholdService.php │ ├── UserService.php │ └── VariableService.php ├── ShareReview │ ├── ShareReviewListener.php │ └── ShareReviewSource.php └── WhatsNew │ ├── WhatsNewCheck.php │ ├── WhatsNewMapper.php │ └── WhatsNewResult.php ├── package.json ├── sample_data ├── multiColumnData.csv ├── sample1.csv └── sample_json.json ├── screenshots ├── architecture.png ├── charts.png ├── datasource regex.png ├── flow.png ├── jetbrains.svg ├── logo.png ├── settings_back.png └── settings_menu.png ├── templates ├── authenticate.php ├── main.php ├── main_advanced.php ├── main_panorama.php ├── part.content.php ├── part.content_advanced.php ├── part.content_panorama.php ├── part.intro.php ├── part.menu.php ├── part.navigation.php ├── part.settings.php ├── part.sidebar.php ├── part.templates.php ├── public.php ├── publicMin.php └── wizard.php ├── tests └── Selenium NC Analytics.side └── vendor ├── autoload.php ├── composer ├── ClassLoader.php ├── LICENSE ├── autoload_classmap.php ├── autoload_files.php ├── autoload_psr4.php ├── autoload_real.php ├── autoload_static.php └── installed.json ├── markbaker ├── complex │ ├── README.md │ ├── classes │ │ ├── Autoloader.php │ │ ├── Bootstrap.php │ │ └── src │ │ │ ├── Complex.php │ │ │ ├── Exception.php │ │ │ ├── functions │ │ │ ├── abs.php │ │ │ ├── acos.php │ │ │ ├── acosh.php │ │ │ ├── acot.php │ │ │ ├── acoth.php │ │ │ ├── acsc.php │ │ │ ├── acsch.php │ │ │ ├── argument.php │ │ │ ├── asec.php │ │ │ ├── asech.php │ │ │ ├── asin.php │ │ │ ├── asinh.php │ │ │ ├── atan.php │ │ │ ├── atanh.php │ │ │ ├── conjugate.php │ │ │ ├── cos.php │ │ │ ├── cosh.php │ │ │ ├── cot.php │ │ │ ├── coth.php │ │ │ ├── csc.php │ │ │ ├── csch.php │ │ │ ├── exp.php │ │ │ ├── inverse.php │ │ │ ├── ln.php │ │ │ ├── log10.php │ │ │ ├── log2.php │ │ │ ├── negative.php │ │ │ ├── pow.php │ │ │ ├── rho.php │ │ │ ├── sec.php │ │ │ ├── sech.php │ │ │ ├── sin.php │ │ │ ├── sinh.php │ │ │ ├── sqrt.php │ │ │ ├── tan.php │ │ │ ├── tanh.php │ │ │ └── theta.php │ │ │ └── operations │ │ │ ├── add.php │ │ │ ├── divideby.php │ │ │ ├── divideinto.php │ │ │ ├── multiply.php │ │ │ └── subtract.php │ ├── composer.json │ ├── examples │ │ ├── complexTest.php │ │ ├── testFunctions.php │ │ └── testOperations.php │ └── license.md └── matrix │ ├── .github │ └── workflows │ │ └── main.yaml │ ├── README.md │ ├── buildPhar.php │ ├── classes │ └── src │ │ ├── Builder.php │ │ ├── Decomposition │ │ ├── Decomposition.php │ │ ├── LU.php │ │ └── QR.php │ │ ├── Exception.php │ │ ├── Functions.php │ │ ├── Functions │ │ ├── adjoint.php │ │ ├── antidiagonal.php │ │ ├── cofactors.php │ │ ├── determinant.php │ │ ├── diagonal.php │ │ ├── identity.php │ │ ├── inverse.php │ │ ├── minors.php │ │ ├── trace.php │ │ └── transpose.php │ │ ├── Matrix.php │ │ ├── Operations │ │ ├── add.php │ │ ├── directsum.php │ │ ├── divideby.php │ │ ├── divideinto.php │ │ ├── multiply.php │ │ └── subtract.php │ │ └── Operators │ │ ├── Addition.php │ │ ├── DirectSum.php │ │ ├── Division.php │ │ ├── Multiplication.php │ │ ├── Operator.php │ │ └── Subtraction.php │ ├── composer.json │ ├── examples │ └── test.php │ ├── infection.json.dist │ ├── license.md │ └── phpstan.neon ├── myclabs └── php-enum │ ├── LICENSE │ ├── README.md │ ├── SECURITY.md │ ├── composer.json │ ├── psalm.xml │ └── src │ ├── Enum.php │ └── PHPUnit │ └── Comparator.php ├── phpoffice └── phpspreadsheet │ ├── .phpcs.xml.dist │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── README.md │ ├── composer.json │ └── src │ └── PhpSpreadsheet │ ├── Calculation │ ├── ArrayEnabled.php │ ├── BinaryComparison.php │ ├── Calculation.php │ ├── Category.php │ ├── Database.php │ ├── Database │ │ ├── DAverage.php │ │ ├── DCount.php │ │ ├── DCountA.php │ │ ├── DGet.php │ │ ├── DMax.php │ │ ├── DMin.php │ │ ├── DProduct.php │ │ ├── DStDev.php │ │ ├── DStDevP.php │ │ ├── DSum.php │ │ ├── DVar.php │ │ ├── DVarP.php │ │ └── DatabaseAbstract.php │ ├── DateTime.php │ ├── DateTimeExcel │ │ ├── Constants.php │ │ ├── Current.php │ │ ├── Date.php │ │ ├── DateParts.php │ │ ├── DateValue.php │ │ ├── Days.php │ │ ├── Days360.php │ │ ├── Difference.php │ │ ├── Helpers.php │ │ ├── Month.php │ │ ├── NetworkDays.php │ │ ├── Time.php │ │ ├── TimeParts.php │ │ ├── TimeValue.php │ │ ├── Week.php │ │ ├── WorkDay.php │ │ └── YearFrac.php │ ├── Engine │ │ ├── ArrayArgumentHelper.php │ │ ├── ArrayArgumentProcessor.php │ │ ├── BranchPruner.php │ │ ├── CyclicReferenceStack.php │ │ ├── FormattedNumber.php │ │ ├── Logger.php │ │ └── Operands │ │ │ ├── Operand.php │ │ │ └── StructuredReference.php │ ├── Engineering.php │ ├── Engineering │ │ ├── BesselI.php │ │ ├── BesselJ.php │ │ ├── BesselK.php │ │ ├── BesselY.php │ │ ├── BitWise.php │ │ ├── Compare.php │ │ ├── Complex.php │ │ ├── ComplexFunctions.php │ │ ├── ComplexOperations.php │ │ ├── Constants.php │ │ ├── ConvertBase.php │ │ ├── ConvertBinary.php │ │ ├── ConvertDecimal.php │ │ ├── ConvertHex.php │ │ ├── ConvertOctal.php │ │ ├── ConvertUOM.php │ │ ├── EngineeringValidations.php │ │ ├── Erf.php │ │ └── ErfC.php │ ├── Exception.php │ ├── ExceptionHandler.php │ ├── Financial.php │ ├── Financial │ │ ├── Amortization.php │ │ ├── CashFlow │ │ │ ├── CashFlowValidations.php │ │ │ ├── Constant │ │ │ │ ├── Periodic.php │ │ │ │ └── Periodic │ │ │ │ │ ├── Cumulative.php │ │ │ │ │ ├── Interest.php │ │ │ │ │ ├── InterestAndPrincipal.php │ │ │ │ │ └── Payments.php │ │ │ ├── Single.php │ │ │ └── Variable │ │ │ │ ├── NonPeriodic.php │ │ │ │ └── Periodic.php │ │ ├── Constants.php │ │ ├── Coupons.php │ │ ├── Depreciation.php │ │ ├── Dollar.php │ │ ├── FinancialValidations.php │ │ ├── Helpers.php │ │ ├── InterestRate.php │ │ ├── Securities │ │ │ ├── AccruedInterest.php │ │ │ ├── Price.php │ │ │ ├── Rates.php │ │ │ ├── SecurityValidations.php │ │ │ └── Yields.php │ │ └── TreasuryBill.php │ ├── FormulaParser.php │ ├── FormulaToken.php │ ├── Functions.php │ ├── Information │ │ ├── ErrorValue.php │ │ ├── ExcelError.php │ │ └── Value.php │ ├── Internal │ │ ├── ExcelArrayPseudoFunctions.php │ │ ├── MakeMatrix.php │ │ └── WildcardMatch.php │ ├── Logical.php │ ├── Logical │ │ ├── Boolean.php │ │ ├── Conditional.php │ │ └── Operations.php │ ├── LookupRef.php │ ├── LookupRef │ │ ├── Address.php │ │ ├── ExcelMatch.php │ │ ├── Filter.php │ │ ├── Formula.php │ │ ├── HLookup.php │ │ ├── Helpers.php │ │ ├── Hyperlink.php │ │ ├── Indirect.php │ │ ├── Lookup.php │ │ ├── LookupBase.php │ │ ├── LookupRefValidations.php │ │ ├── Matrix.php │ │ ├── Offset.php │ │ ├── RowColumnInformation.php │ │ ├── Selection.php │ │ ├── Sort.php │ │ ├── Unique.php │ │ └── VLookup.php │ ├── MathTrig.php │ ├── MathTrig │ │ ├── Absolute.php │ │ ├── Angle.php │ │ ├── Arabic.php │ │ ├── Base.php │ │ ├── Ceiling.php │ │ ├── Combinations.php │ │ ├── Exp.php │ │ ├── Factorial.php │ │ ├── Floor.php │ │ ├── Gcd.php │ │ ├── Helpers.php │ │ ├── IntClass.php │ │ ├── Lcm.php │ │ ├── Logarithms.php │ │ ├── MatrixFunctions.php │ │ ├── Operations.php │ │ ├── Random.php │ │ ├── Roman.php │ │ ├── Round.php │ │ ├── SeriesSum.php │ │ ├── Sign.php │ │ ├── Sqrt.php │ │ ├── Subtotal.php │ │ ├── Sum.php │ │ ├── SumSquares.php │ │ ├── Trig │ │ │ ├── Cosecant.php │ │ │ ├── Cosine.php │ │ │ ├── Cotangent.php │ │ │ ├── Secant.php │ │ │ ├── Sine.php │ │ │ └── Tangent.php │ │ └── Trunc.php │ ├── Statistical.php │ ├── Statistical │ │ ├── AggregateBase.php │ │ ├── Averages.php │ │ ├── Averages │ │ │ └── Mean.php │ │ ├── Conditional.php │ │ ├── Confidence.php │ │ ├── Counts.php │ │ ├── Deviations.php │ │ ├── Distributions │ │ │ ├── Beta.php │ │ │ ├── Binomial.php │ │ │ ├── ChiSquared.php │ │ │ ├── DistributionValidations.php │ │ │ ├── Exponential.php │ │ │ ├── F.php │ │ │ ├── Fisher.php │ │ │ ├── Gamma.php │ │ │ ├── GammaBase.php │ │ │ ├── HyperGeometric.php │ │ │ ├── LogNormal.php │ │ │ ├── NewtonRaphson.php │ │ │ ├── Normal.php │ │ │ ├── Poisson.php │ │ │ ├── StandardNormal.php │ │ │ ├── StudentT.php │ │ │ └── Weibull.php │ │ ├── MaxMinBase.php │ │ ├── Maximum.php │ │ ├── Minimum.php │ │ ├── Percentiles.php │ │ ├── Permutations.php │ │ ├── Size.php │ │ ├── StandardDeviations.php │ │ ├── Standardize.php │ │ ├── StatisticalValidations.php │ │ ├── Trends.php │ │ ├── VarianceBase.php │ │ └── Variances.php │ ├── TextData.php │ ├── TextData │ │ ├── CaseConvert.php │ │ ├── CharacterConvert.php │ │ ├── Concatenate.php │ │ ├── Extract.php │ │ ├── Format.php │ │ ├── Helpers.php │ │ ├── Replace.php │ │ ├── Search.php │ │ ├── Text.php │ │ └── Trim.php │ ├── Token │ │ └── Stack.php │ ├── Web.php │ ├── Web │ │ └── Service.php │ ├── functionlist.txt │ └── locale │ │ ├── Translations.xlsx │ │ ├── bg │ │ ├── config │ │ └── functions │ │ ├── cs │ │ ├── config │ │ └── functions │ │ ├── da │ │ ├── config │ │ └── functions │ │ ├── de │ │ ├── config │ │ └── functions │ │ ├── en │ │ └── uk │ │ │ └── config │ │ ├── es │ │ ├── config │ │ └── functions │ │ ├── fi │ │ ├── config │ │ └── functions │ │ ├── fr │ │ ├── config │ │ └── functions │ │ ├── hu │ │ ├── config │ │ └── functions │ │ ├── it │ │ ├── config │ │ └── functions │ │ ├── nb │ │ ├── config │ │ └── functions │ │ ├── nl │ │ ├── config │ │ └── functions │ │ ├── no │ │ ├── config │ │ └── functions │ │ ├── pl │ │ ├── config │ │ └── functions │ │ ├── pt │ │ ├── br │ │ │ ├── config │ │ │ └── functions │ │ ├── config │ │ └── functions │ │ ├── ru │ │ ├── config │ │ └── functions │ │ ├── sv │ │ ├── config │ │ └── functions │ │ └── tr │ │ ├── config │ │ └── functions │ ├── Cell │ ├── AddressHelper.php │ ├── AddressRange.php │ ├── AdvancedValueBinder.php │ ├── Cell.php │ ├── CellAddress.php │ ├── CellRange.php │ ├── ColumnRange.php │ ├── Coordinate.php │ ├── DataType.php │ ├── DataValidation.php │ ├── DataValidator.php │ ├── DefaultValueBinder.php │ ├── Hyperlink.php │ ├── IValueBinder.php │ ├── IgnoredErrors.php │ ├── RowRange.php │ └── StringValueBinder.php │ ├── CellReferenceHelper.php │ ├── Chart │ ├── Axis.php │ ├── AxisText.php │ ├── Chart.php │ ├── ChartColor.php │ ├── DataSeries.php │ ├── DataSeriesValues.php │ ├── Exception.php │ ├── GridLines.php │ ├── Layout.php │ ├── Legend.php │ ├── PlotArea.php │ ├── Properties.php │ ├── Renderer │ │ ├── IRenderer.php │ │ ├── JpGraph.php │ │ ├── JpGraphRendererBase.php │ │ ├── MtJpGraphRenderer.php │ │ └── PHP Charting Libraries.txt │ ├── Title.php │ └── TrendLine.php │ ├── Collection │ ├── Cells.php │ ├── CellsFactory.php │ ├── Memory.php │ └── Memory │ │ ├── SimpleCache1.php │ │ └── SimpleCache3.php │ ├── Comment.php │ ├── DefinedName.php │ ├── Document │ ├── Properties.php │ └── Security.php │ ├── DocumentGenerator.php │ ├── Exception.php │ ├── HashTable.php │ ├── Helper │ ├── Dimension.php │ ├── Downloader.php │ ├── Handler.php │ ├── Html.php │ ├── Sample.php │ ├── Size.php │ └── TextGrid.php │ ├── IComparable.php │ ├── IOFactory.php │ ├── NamedFormula.php │ ├── NamedRange.php │ ├── Reader │ ├── BaseReader.php │ ├── Csv.php │ ├── Csv │ │ └── Delimiter.php │ ├── DefaultReadFilter.php │ ├── Exception.php │ ├── Gnumeric.php │ ├── Gnumeric │ │ ├── PageSetup.php │ │ ├── Properties.php │ │ └── Styles.php │ ├── Html.php │ ├── IReadFilter.php │ ├── IReader.php │ ├── Ods.php │ ├── Ods │ │ ├── AutoFilter.php │ │ ├── BaseLoader.php │ │ ├── DefinedNames.php │ │ ├── FormulaTranslator.php │ │ ├── PageSettings.php │ │ └── Properties.php │ ├── Security │ │ └── XmlScanner.php │ ├── Slk.php │ ├── Xls.php │ ├── Xls │ │ ├── Biff5.php │ │ ├── Biff8.php │ │ ├── Color.php │ │ ├── Color │ │ │ ├── BIFF5.php │ │ │ ├── BIFF8.php │ │ │ └── BuiltIn.php │ │ ├── ConditionalFormatting.php │ │ ├── DataValidationHelper.php │ │ ├── ErrorCode.php │ │ ├── Escher.php │ │ ├── ListFunctions.php │ │ ├── LoadSpreadsheet.php │ │ ├── MD5.php │ │ ├── Mappings.php │ │ ├── RC4.php │ │ └── Style │ │ │ ├── Border.php │ │ │ ├── CellAlignment.php │ │ │ ├── CellFont.php │ │ │ └── FillPattern.php │ ├── XlsBase.php │ ├── Xlsx.php │ ├── Xlsx │ │ ├── AutoFilter.php │ │ ├── BaseParserClass.php │ │ ├── Chart.php │ │ ├── ColumnAndRowAttributes.php │ │ ├── ConditionalStyles.php │ │ ├── DataValidations.php │ │ ├── Hyperlinks.php │ │ ├── Namespaces.php │ │ ├── PageSetup.php │ │ ├── Properties.php │ │ ├── SharedFormula.php │ │ ├── SheetViewOptions.php │ │ ├── SheetViews.php │ │ ├── Styles.php │ │ ├── TableReader.php │ │ ├── Theme.php │ │ └── WorkbookView.php │ ├── Xml.php │ └── Xml │ │ ├── DataValidations.php │ │ ├── PageSettings.php │ │ ├── Properties.php │ │ ├── Style.php │ │ └── Style │ │ ├── Alignment.php │ │ ├── Border.php │ │ ├── Fill.php │ │ ├── Font.php │ │ ├── NumberFormat.php │ │ └── StyleBase.php │ ├── ReferenceHelper.php │ ├── RichText │ ├── ITextElement.php │ ├── RichText.php │ ├── Run.php │ └── TextElement.php │ ├── Settings.php │ ├── Shared │ ├── CodePage.php │ ├── Date.php │ ├── Drawing.php │ ├── Escher.php │ ├── Escher │ │ ├── DgContainer.php │ │ ├── DgContainer │ │ │ ├── SpgrContainer.php │ │ │ └── SpgrContainer │ │ │ │ └── SpContainer.php │ │ ├── DggContainer.php │ │ └── DggContainer │ │ │ ├── BstoreContainer.php │ │ │ └── BstoreContainer │ │ │ ├── BSE.php │ │ │ └── BSE │ │ │ └── Blip.php │ ├── File.php │ ├── Font.php │ ├── IntOrFloat.php │ ├── JAMA │ │ ├── CHANGELOG.TXT │ │ ├── CholeskyDecomposition.php │ │ ├── EigenvalueDecomposition.php │ │ ├── LUDecomposition.php │ │ ├── Matrix.php │ │ ├── QRDecomposition.php │ │ ├── SingularValueDecomposition.php │ │ └── utils │ │ │ └── Maths.php │ ├── OLE.php │ ├── OLE │ │ ├── ChainedBlockStream.php │ │ ├── PPS.php │ │ └── PPS │ │ │ ├── File.php │ │ │ └── Root.php │ ├── OLERead.php │ ├── PasswordHasher.php │ ├── StringHelper.php │ ├── TimeZone.php │ ├── Trend │ │ ├── BestFit.php │ │ ├── ExponentialBestFit.php │ │ ├── LinearBestFit.php │ │ ├── LogarithmicBestFit.php │ │ ├── PolynomialBestFit.php │ │ ├── PowerBestFit.php │ │ └── Trend.php │ ├── XMLWriter.php │ └── Xls.php │ ├── Spreadsheet.php │ ├── Style │ ├── Alignment.php │ ├── Border.php │ ├── Borders.php │ ├── Color.php │ ├── Conditional.php │ ├── ConditionalFormatting │ │ ├── CellMatcher.php │ │ ├── CellStyleAssessor.php │ │ ├── ConditionalColorScale.php │ │ ├── ConditionalDataBar.php │ │ ├── ConditionalDataBarExtension.php │ │ ├── ConditionalFormatValueObject.php │ │ ├── ConditionalFormattingRuleExtension.php │ │ ├── StyleMerger.php │ │ ├── Wizard.php │ │ └── Wizard │ │ │ ├── Blanks.php │ │ │ ├── CellValue.php │ │ │ ├── DateValue.php │ │ │ ├── Duplicates.php │ │ │ ├── Errors.php │ │ │ ├── Expression.php │ │ │ ├── TextValue.php │ │ │ ├── WizardAbstract.php │ │ │ └── WizardInterface.php │ ├── Fill.php │ ├── Font.php │ ├── NumberFormat.php │ ├── NumberFormat │ │ ├── BaseFormatter.php │ │ ├── DateFormatter.php │ │ ├── Formatter.php │ │ ├── FractionFormatter.php │ │ ├── NumberFormatter.php │ │ ├── PercentageFormatter.php │ │ └── Wizard │ │ │ ├── Accounting.php │ │ │ ├── Currency.php │ │ │ ├── CurrencyBase.php │ │ │ ├── CurrencyNegative.php │ │ │ ├── Date.php │ │ │ ├── DateTime.php │ │ │ ├── DateTimeWizard.php │ │ │ ├── Duration.php │ │ │ ├── Locale.php │ │ │ ├── Number.php │ │ │ ├── NumberBase.php │ │ │ ├── Percentage.php │ │ │ ├── Scientific.php │ │ │ ├── Time.php │ │ │ └── Wizard.php │ ├── Protection.php │ ├── RgbTint.php │ ├── Style.php │ └── Supervisor.php │ ├── Theme.php │ └── Worksheet │ ├── AutoFilter.php │ ├── AutoFilter │ ├── Column.php │ └── Column │ │ └── Rule.php │ ├── AutoFit.php │ ├── BaseDrawing.php │ ├── CellIterator.php │ ├── Column.php │ ├── ColumnCellIterator.php │ ├── ColumnDimension.php │ ├── ColumnIterator.php │ ├── Dimension.php │ ├── Drawing.php │ ├── Drawing │ └── Shadow.php │ ├── HeaderFooter.php │ ├── HeaderFooterDrawing.php │ ├── Iterator.php │ ├── MemoryDrawing.php │ ├── PageBreak.php │ ├── PageMargins.php │ ├── PageSetup.php │ ├── Pane.php │ ├── ProtectedRange.php │ ├── Protection.php │ ├── Row.php │ ├── RowCellIterator.php │ ├── RowDimension.php │ ├── RowIterator.php │ ├── SheetView.php │ ├── Table.php │ ├── Table │ ├── Column.php │ └── TableStyle.php │ ├── Validations.php │ └── Worksheet.php └── psr └── simple-cache ├── .editorconfig ├── LICENSE.md ├── README.md ├── composer.json └── src ├── CacheException.php ├── CacheInterface.php └── InvalidArgumentException.php /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | 'env': { 3 | 'browser': true, 4 | 'es6': true, 5 | 'jquery': true 6 | }, 7 | 'extends': 'eslint:recommended', 8 | 'globals': { 9 | 'OC': 'readonly', 10 | 'OCA': 'readonly', 11 | 't': 'readonly' 12 | }, 13 | 'parserOptions': { 14 | 'ecmaVersion': 6, 15 | 'sourceType': 'module' 16 | }, 17 | 'rules': { 18 | 'brace-style': [ 19 | 'error', 20 | '1tbs', 21 | { 'allowSingleLine': true } 22 | ], 23 | 'curly': [ 24 | 'error', 25 | 'all' 26 | ], 27 | 'indent': [ 28 | 'error', 29 | 4 30 | ], 31 | 'linebreak-style': [ 32 | 'error', 33 | 'unix' 34 | ], 35 | 'no-console': [ 36 | 'error', 37 | { allow: [ 'warn', 'error' ] } 38 | ], 39 | 'quotes': [ 40 | 'error', 41 | 'single' 42 | ], 43 | 'semi': [ 44 | 'error', 45 | 'always' 46 | ], 47 | } 48 | }; 49 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: Rello 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /.github/workflows/reuse.yml: -------------------------------------------------------------------------------- 1 | # This workflow is provided via the organization template repository 2 | # 3 | # https://github.com/nextcloud/.github 4 | # https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization 5 | 6 | # SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V. 7 | # 8 | # SPDX-License-Identifier: CC0-1.0 9 | 10 | name: REUSE Compliance Check 11 | 12 | on: [pull_request] 13 | 14 | jobs: 15 | reuse-compliance-check: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 20 | 21 | - name: REUSE Compliance Check 22 | uses: fsfe/reuse-action@3ae3c6bdf1257ab19397fab11fd3312144692083 # v4.0.0 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Various 2 | .*.sw[po] 3 | *.bak 4 | *.BAK 5 | *~ 6 | *.orig 7 | *.class 8 | .cvsignore 9 | Thumbs.db 10 | .thumbs 11 | *.py[co] 12 | _darcs/* 13 | CVS/* 14 | .svn/* 15 | RCS/* 16 | *.backup* 17 | *.Lock 18 | .idea 19 | docs/* 20 | 21 | # Mac OS 22 | .DS_Store 23 | __MACOSX/* 24 | ._* 25 | .smbdelete* 26 | 27 | # VSCode 28 | .vscode/ 29 | *.code-workspace 30 | -------------------------------------------------------------------------------- /.l10nignore: -------------------------------------------------------------------------------- 1 | js/3rdParty/ 2 | vendor/ 3 | sample_data/ 4 | screenshots/ 5 | appinfo/ 6 | README.md 7 | -------------------------------------------------------------------------------- /.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | build: 2 | nodes: 3 | analysis: 4 | project_setup: 5 | override: true 6 | tests: 7 | override: 8 | - php-scrutinizer-run 9 | - js-scrutinizer-run 10 | 11 | environment: 12 | php: 8.2.0 13 | 14 | filter: 15 | excluded_paths: 16 | - 'js/3rdParty/*' 17 | - 'vendor/*' 18 | - 'sample_data/*' 19 | - 'translationfiles/*' 20 | 21 | imports: 22 | - javascript 23 | - php 24 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg 4 | 5 | [o:nextcloud:p:nextcloud:r:nextcloud-analytics] 6 | file_filter = translationfiles//analytics.po 7 | source_file = translationfiles/templates/analytics.pot 8 | source_lang = en 9 | type = PO 10 | 11 | -------------------------------------------------------------------------------- /AGENTS.md: -------------------------------------------------------------------------------- 1 | 2 | # Project Agents.md Guide for OpenAI Codex 3 | 4 | This `AGENTS.md` file provides guidelines for OpenAI Codex and other AI agents interacting with this codebase, including which directories are safe to read from or write to. 5 | 6 | ## Project Structure: AI Agent Handling Guidelines 7 | 8 | | Directory | Description | Agent Action | 9 | |-------------------|-------------------------------------------------------|----------------------| 10 | | `/vendor` | External plugins; may help understand data sources. | Do not modify | 11 | | `/l10n` | Translation files from Transifex. | Do not modify | 12 | | `/js/3rdParty` | Third-party JavaScript plugins. | Do not modify | 13 | | `/css/3rdParty` | Third-party CSS plugins. | Do not modify | 14 | | `/sample_data` | Example data for human reference. | Irrelevant to agents | 15 | | `/screenshots` | UI images for documentation purposes. | Irrelevant to agents | 16 | 17 | ## General Guidance 18 | 19 | Agents should focus on the core application logic and ignore files or folders marked as third-party, sample, or media-related. All changes should preserve the integrity of external dependencies and translations. -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | # Authors 2 | 3 | * [Marcel Scherello](https://github.com/rello) (project leader) 4 | -------------------------------------------------------------------------------- /LICENSES/MIT.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /analytics.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "." 5 | } 6 | ], 7 | "settings": {} 8 | } -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "php": "^8.0", 4 | "phpoffice/phpspreadsheet": "^1.29.0" 5 | } 6 | } -------------------------------------------------------------------------------- /css/advanced.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Analytics 3 | * 4 | * SPDX-FileCopyrightText: 2019-2022 Marcel Scherello 5 | * SPDX-License-Identifier: AGPL-3.0-or-later 6 | */ 7 | 8 | #app-sidebar { 9 | width: initial !important; 10 | max-width: initial !important; 11 | border-left: initial !important; 12 | height: initial !important; 13 | } 14 | 15 | .dataloadItem > a { 16 | background-position: 14px center; 17 | line-height: 44px; 18 | padding: 0 12px 0 44px; 19 | } 20 | 21 | #dataloadDetail, #dataloadRun { 22 | padding-top: 30px; 23 | } 24 | 25 | .wizardHeader { 26 | text-align: center; 27 | margin-top: 15px; 28 | min-height: 26px; 29 | border-bottom: 1px solid var(--color-border-dark); 30 | border-top: 1px solid var(--color-border-dark); 31 | } 32 | 33 | #sidebarTitle { 34 | display: none !important; 35 | } -------------------------------------------------------------------------------- /img/add.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/app-color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /img/app-dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /img/app.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /img/arrowDown.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/arrowRight.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/chartArea.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/chartBar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/chartDonut.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/chartFunnel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/chartLine.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/chartNone.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/chartTable.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/chartTime.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/chartoptions.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/column.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/copy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/dataset.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/img/favicon.png -------------------------------------------------------------------------------- /img/filter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/filteradd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/filterremove.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/forecast.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/fullscreen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/fullscreenExit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/gripLines.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/group.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/more.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/noReport.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/options.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/overview.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/panorama.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/pdf.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/refresh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/report.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/reset.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/row.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/sort.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/tableOptions.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/timeAggregation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/translate.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/warning.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /img/wizard_charts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/img/wizard_charts.png -------------------------------------------------------------------------------- /img/wizard_dataload.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/img/wizard_dataload.gif -------------------------------------------------------------------------------- /img/wizard_datasources.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/img/wizard_datasources.gif -------------------------------------------------------------------------------- /img/wizard_filter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/img/wizard_filter.gif -------------------------------------------------------------------------------- /js/authenticate.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Analytics 3 | * 4 | * SPDX-FileCopyrightText: 2019-2022 Marcel Scherello 5 | * SPDX-License-Identifier: AGPL-3.0-or-later 6 | */ 7 | 8 | document.addEventListener('DOMContentLoaded', function () { 9 | $('#password').on('keyup input change', function () { 10 | if ($('#password').val().length > 0) { 11 | $('#password-submit').prop('disabled', false); 12 | } else { 13 | $('#password-submit').prop('disabled', true); 14 | } 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /js/reference.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Analytics 3 | * 4 | * SPDX-FileCopyrightText: 2019-2022 Marcel Scherello 5 | * SPDX-License-Identifier: AGPL-3.0-or-later 6 | */ 7 | 8 | /** global: OC */ 9 | 10 | 'use strict'; 11 | 12 | document.addEventListener('DOMContentLoaded', function () { 13 | OCA.Analytics.Reference.init(); 14 | }) 15 | 16 | if (!OCA.Analytics) { 17 | /** 18 | * @namespace 19 | */ 20 | OCA.Analytics = {}; 21 | } 22 | /** 23 | * @namespace OCA.Analytics.Reference 24 | */ 25 | OCA.Analytics.Reference = { 26 | init: function () { 27 | _registerWidget('analytics', async (el, {richObjectType, richObject, accessible}) => { 28 | el.innerHTML = '' 29 | + '' 30 | + '
' 31 | + '
' + richObject.name + '
' 32 | + '
' 33 | + '
' + richObject.subheader + '
' 34 | //+ '
' + richObject.url + '
' 35 | + '
'; 36 | }); 37 | }, 38 | } -------------------------------------------------------------------------------- /l10n/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/l10n/.gitkeep -------------------------------------------------------------------------------- /l10n/be.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "analytics", 3 | { 4 | "Delete" : "Delete", 5 | "Remove from favorites" : "Remove from favorites", 6 | "Add to favorites" : "Add to favorites", 7 | "Share" : "Падзяліцца", 8 | "Share link" : "Share link", 9 | "Type" : "Type", 10 | "Notification" : "Абвестка", 11 | "Date" : "Date", 12 | "OK" : "OK", 13 | "Cancel" : "Cancel", 14 | "Search" : "Search", 15 | "Yes" : "Yes", 16 | "No" : "No", 17 | "copy" : "капіяваць", 18 | "Password" : "Password", 19 | "Favorites" : "Favorites", 20 | "Settings" : "Налады", 21 | "Title" : "Title", 22 | "Copy" : "Капіяваць", 23 | "Daily" : "Штодзень", 24 | "Hourly" : "Штогадзіну", 25 | "Password protection" : "Password protection", 26 | "Sort by" : "Сартаваць па" 27 | }, 28 | "nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); 29 | -------------------------------------------------------------------------------- /l10n/be.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Delete", 3 | "Remove from favorites" : "Remove from favorites", 4 | "Add to favorites" : "Add to favorites", 5 | "Share" : "Падзяліцца", 6 | "Share link" : "Share link", 7 | "Type" : "Type", 8 | "Notification" : "Абвестка", 9 | "Date" : "Date", 10 | "OK" : "OK", 11 | "Cancel" : "Cancel", 12 | "Search" : "Search", 13 | "Yes" : "Yes", 14 | "No" : "No", 15 | "copy" : "капіяваць", 16 | "Password" : "Password", 17 | "Favorites" : "Favorites", 18 | "Settings" : "Налады", 19 | "Title" : "Title", 20 | "Copy" : "Капіяваць", 21 | "Daily" : "Штодзень", 22 | "Hourly" : "Штогадзіну", 23 | "Password protection" : "Password protection", 24 | "Sort by" : "Сартаваць па" 25 | },"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" 26 | } -------------------------------------------------------------------------------- /l10n/bs.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "analytics", 3 | { 4 | "Saved" : "Spremljeno", 5 | "Delete" : "Obriši", 6 | "Remove from favorites" : "Remove from favorites", 7 | "Delete folder" : "Izbriši fasciklu", 8 | "Add to favorites" : "Add to favorites", 9 | "Share" : "Podjeli", 10 | "Save" : "Spremi", 11 | "Download" : "Preuzmi", 12 | "New" : "Novo", 13 | "Share link" : "Podijelite vezu", 14 | "Type" : "Type", 15 | "Date" : "Date", 16 | "OK" : "OK", 17 | "Cancel" : "Otkaži", 18 | "Search" : "Search", 19 | "Yes" : "Yes", 20 | "No" : "No", 21 | "Version" : "Verzija", 22 | "Local" : "Lokalno", 23 | "Password" : "Lozinka", 24 | "Favorites" : "Favoriti", 25 | "Settings" : "Podešavanje", 26 | "Name" : "Ime", 27 | "Update" : "Ažuriraj", 28 | "Export" : "Izvezi", 29 | "Description" : "Opis", 30 | "Import" : "Uvoz", 31 | "Title" : "Naslov", 32 | "Daily" : "Dnevno", 33 | "Hourly" : "Svakog sata", 34 | "Unshare" : "Prestani dijeliti", 35 | "Password protection" : "Password protection", 36 | "Create" : "Ustvari" 37 | }, 38 | "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); 39 | -------------------------------------------------------------------------------- /l10n/bs.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "Spremljeno", 3 | "Delete" : "Obriši", 4 | "Remove from favorites" : "Remove from favorites", 5 | "Delete folder" : "Izbriši fasciklu", 6 | "Add to favorites" : "Add to favorites", 7 | "Share" : "Podjeli", 8 | "Save" : "Spremi", 9 | "Download" : "Preuzmi", 10 | "New" : "Novo", 11 | "Share link" : "Podijelite vezu", 12 | "Type" : "Type", 13 | "Date" : "Date", 14 | "OK" : "OK", 15 | "Cancel" : "Otkaži", 16 | "Search" : "Search", 17 | "Yes" : "Yes", 18 | "No" : "No", 19 | "Version" : "Verzija", 20 | "Local" : "Lokalno", 21 | "Password" : "Lozinka", 22 | "Favorites" : "Favoriti", 23 | "Settings" : "Podešavanje", 24 | "Name" : "Ime", 25 | "Update" : "Ažuriraj", 26 | "Export" : "Izvezi", 27 | "Description" : "Opis", 28 | "Import" : "Uvoz", 29 | "Title" : "Naslov", 30 | "Daily" : "Dnevno", 31 | "Hourly" : "Svakog sata", 32 | "Unshare" : "Prestani dijeliti", 33 | "Password protection" : "Password protection", 34 | "Create" : "Ustvari" 35 | },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" 36 | } -------------------------------------------------------------------------------- /l10n/gd.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "analytics", 3 | { 4 | "Delete" : "Sguab às", 5 | "Default" : "Bunaiteach", 6 | "Add to favorites" : "Cuir ris na h-annsachdan", 7 | "Share" : "Co-roinn", 8 | "Save" : "Sàbhail", 9 | "Download" : "Luchdaich a-nuas", 10 | "Report" : "Dèan aithris air", 11 | "Share link" : "Ceangal co-roinnidh", 12 | "Link copied" : "Chaidh lethbhreac dhen cheangal a dhèanamh", 13 | "Type" : "Seòrsa", 14 | "OK" : "Ceart ma-thà", 15 | "Cancel" : "Sguir dheth", 16 | "Search" : "Lorg", 17 | "Yes" : "Tha", 18 | "No" : "Chan eil", 19 | "Issues" : "Bugaichean", 20 | "Version" : "Tionndadh", 21 | "File" : "Faidhle", 22 | "Password" : "Facal-faire", 23 | "Favorites" : "Annsachdan", 24 | "Translate" : "Eadar-theangaich", 25 | "Back" : "Air ais", 26 | "Settings" : "Roghainnean", 27 | "Name" : "Ainm", 28 | "Copy" : "Dèan lethbhreac", 29 | "Unshare" : "Na co-roinn tuilleadh", 30 | "Copy link" : "Dèan lethbhreac dhen cheangal", 31 | "Sort by" : "Seòrsaich a-rèir", 32 | "Create" : "Cruthaich" 33 | }, 34 | "nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;"); 35 | -------------------------------------------------------------------------------- /l10n/gd.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Sguab às", 3 | "Default" : "Bunaiteach", 4 | "Add to favorites" : "Cuir ris na h-annsachdan", 5 | "Share" : "Co-roinn", 6 | "Save" : "Sàbhail", 7 | "Download" : "Luchdaich a-nuas", 8 | "Report" : "Dèan aithris air", 9 | "Share link" : "Ceangal co-roinnidh", 10 | "Link copied" : "Chaidh lethbhreac dhen cheangal a dhèanamh", 11 | "Type" : "Seòrsa", 12 | "OK" : "Ceart ma-thà", 13 | "Cancel" : "Sguir dheth", 14 | "Search" : "Lorg", 15 | "Yes" : "Tha", 16 | "No" : "Chan eil", 17 | "Issues" : "Bugaichean", 18 | "Version" : "Tionndadh", 19 | "File" : "Faidhle", 20 | "Password" : "Facal-faire", 21 | "Favorites" : "Annsachdan", 22 | "Translate" : "Eadar-theangaich", 23 | "Back" : "Air ais", 24 | "Settings" : "Roghainnean", 25 | "Name" : "Ainm", 26 | "Copy" : "Dèan lethbhreac", 27 | "Unshare" : "Na co-roinn tuilleadh", 28 | "Copy link" : "Dèan lethbhreac dhen cheangal", 29 | "Sort by" : "Seòrsaich a-rèir", 30 | "Create" : "Cruthaich" 31 | },"pluralForm" :"nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;" 32 | } -------------------------------------------------------------------------------- /l10n/kab.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "analytics", 3 | { 4 | "Delete" : "Kkes", 5 | "Done" : "Immed", 6 | "Filter" : "Sizdeg", 7 | "Default" : "Prédéfini(e)", 8 | "Remove from favorites" : "Kkes-it seg ismal", 9 | "Add to favorites" : "Rnu ismal", 10 | "Share" : "Bḍu", 11 | "Save" : "Sekles", 12 | "Download" : "Sider", 13 | "Report" : "Aneqqis", 14 | "Share link" : "Fren aseɣwen", 15 | "Link copied" : "Aseɣwen yettwanɣel", 16 | "Type" : "Anaw", 17 | "Notification" : "Alɣu", 18 | "OK" : "IH", 19 | "Cancel" : "Sefsex", 20 | "Search" : "Nadi", 21 | "Yes" : "Oui", 22 | "No" : "Uhu", 23 | "Local" : "Adigan", 24 | "File" : "Afaylu", 25 | "Announcements" : "Ilɣa", 26 | "Password" : "Awal uffir", 27 | "Options" : "Iɣewwaṛen", 28 | "Favorites" : "Imenyafen", 29 | "Translate" : "Suqel", 30 | "Back" : "Retour", 31 | "Settings" : "Iɣewwaṛen", 32 | "Name" : "Nom", 33 | "Title" : "Azwel", 34 | "Copy" : "Nɣel", 35 | "Daily" : "S wass", 36 | "Hourly" : "S usrag", 37 | "Copy link" : "Nɣel aseɣwen", 38 | "Sort by" : "Trier par", 39 | "Create" : "Snulfu-d" 40 | }, 41 | "nplurals=2; plural=(n != 1);"); 42 | -------------------------------------------------------------------------------- /l10n/kab.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Kkes", 3 | "Done" : "Immed", 4 | "Filter" : "Sizdeg", 5 | "Default" : "Prédéfini(e)", 6 | "Remove from favorites" : "Kkes-it seg ismal", 7 | "Add to favorites" : "Rnu ismal", 8 | "Share" : "Bḍu", 9 | "Save" : "Sekles", 10 | "Download" : "Sider", 11 | "Report" : "Aneqqis", 12 | "Share link" : "Fren aseɣwen", 13 | "Link copied" : "Aseɣwen yettwanɣel", 14 | "Type" : "Anaw", 15 | "Notification" : "Alɣu", 16 | "OK" : "IH", 17 | "Cancel" : "Sefsex", 18 | "Search" : "Nadi", 19 | "Yes" : "Oui", 20 | "No" : "Uhu", 21 | "Local" : "Adigan", 22 | "File" : "Afaylu", 23 | "Announcements" : "Ilɣa", 24 | "Password" : "Awal uffir", 25 | "Options" : "Iɣewwaṛen", 26 | "Favorites" : "Imenyafen", 27 | "Translate" : "Suqel", 28 | "Back" : "Retour", 29 | "Settings" : "Iɣewwaṛen", 30 | "Name" : "Nom", 31 | "Title" : "Azwel", 32 | "Copy" : "Nɣel", 33 | "Daily" : "S wass", 34 | "Hourly" : "S usrag", 35 | "Copy link" : "Nɣel aseɣwen", 36 | "Sort by" : "Trier par", 37 | "Create" : "Snulfu-d" 38 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 39 | } -------------------------------------------------------------------------------- /l10n/kn.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "analytics", 3 | { 4 | "Saved" : "ಉಳಿಸಿದ", 5 | "Delete" : "ಅಳಿಸಿ", 6 | "Remove from favorites" : "Remove from favorites", 7 | "Add to favorites" : "Add to favorites", 8 | "Share" : "ಹಂಚಿಕೊಳ್ಳಿ", 9 | "Save" : "ಉಳಿಸಿ", 10 | "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ", 11 | "New" : "ಹೊಸ", 12 | "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು", 13 | "Type" : "Type", 14 | "Date" : "Date", 15 | "OK" : "ಸರಿ", 16 | "Cancel" : "ರದ್ದು", 17 | "Search" : "Search", 18 | "Yes" : "Yes", 19 | "No" : "No", 20 | "Version" : "ಆವೃತ್ತಿ", 21 | "Local" : "ಸ್ಥಳೀಯ", 22 | "Password" : "ಗುಪ್ತ ಪದ", 23 | "Favorites" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", 24 | "Settings" : "ಆಯ್ಕೆ", 25 | "Name" : "ಹೆಸರು", 26 | "Export" : "ರಫ್ತು", 27 | "Import" : "ಆಮದು", 28 | "Title" : "ಶೀರ್ಷಿಕೆ", 29 | "Copy" : "ನಕಲಿಸಿ", 30 | "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ", 31 | "Password protection" : "Password protection", 32 | "Create" : "ಸೃಷ್ಟಿಸಿ" 33 | }, 34 | "nplurals=2; plural=(n > 1);"); 35 | -------------------------------------------------------------------------------- /l10n/kn.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Saved" : "ಉಳಿಸಿದ", 3 | "Delete" : "ಅಳಿಸಿ", 4 | "Remove from favorites" : "Remove from favorites", 5 | "Add to favorites" : "Add to favorites", 6 | "Share" : "ಹಂಚಿಕೊಳ್ಳಿ", 7 | "Save" : "ಉಳಿಸಿ", 8 | "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ", 9 | "New" : "ಹೊಸ", 10 | "Share link" : "ಸಂಪರ್ಕ ಕೊಂಡಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು", 11 | "Type" : "Type", 12 | "Date" : "Date", 13 | "OK" : "ಸರಿ", 14 | "Cancel" : "ರದ್ದು", 15 | "Search" : "Search", 16 | "Yes" : "Yes", 17 | "No" : "No", 18 | "Version" : "ಆವೃತ್ತಿ", 19 | "Local" : "ಸ್ಥಳೀಯ", 20 | "Password" : "ಗುಪ್ತ ಪದ", 21 | "Favorites" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", 22 | "Settings" : "ಆಯ್ಕೆ", 23 | "Name" : "ಹೆಸರು", 24 | "Export" : "ರಫ್ತು", 25 | "Import" : "ಆಮದು", 26 | "Title" : "ಶೀರ್ಷಿಕೆ", 27 | "Copy" : "ನಕಲಿಸಿ", 28 | "Unshare" : "ಹಂಚಿಕೆಯನ್ನು ಹಿಂತೆಗೆ", 29 | "Password protection" : "Password protection", 30 | "Create" : "ಸೃಷ್ಟಿಸಿ" 31 | },"pluralForm" :"nplurals=2; plural=(n > 1);" 32 | } -------------------------------------------------------------------------------- /l10n/lo.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "analytics", 3 | { 4 | "Delete" : "ລຶບ", 5 | "Default" : "ເລີ່ມຕົ້ນ", 6 | "Remove from favorites" : "ຍ້າຍຈາກລາຍການທີ່ມັກ", 7 | "Delete folder" : "ລຶບໂຟນເດີ", 8 | "Add to favorites" : "ເພີ່ມລາຍການທີ່ມັກ", 9 | "Share" : "ແບ່ງປັນ", 10 | "Save" : "ບັນທຶກ", 11 | "Download" : "ດາວໂຫລດ", 12 | "Report" : "ລາຍງານ", 13 | "Share link" : "ແບ່ງປັນລິງ", 14 | "Link copied" : "ສຳເນົາລິງ", 15 | "Type" : "ພິມ", 16 | "Notification" : "ແຈ້ງການ", 17 | "Date" : "ວັນທີ", 18 | "New in" : "ໃຫມ່", 19 | "View changelog" : "ເບິ່ງການປ່ຽນແປງ", 20 | "OK" : "ຕົກລົງ", 21 | "Cancel" : "ຍົກເລີກ", 22 | "Search" : "ຄົ້ນຫາ", 23 | "Yes" : "ແມ່ນແລ້ວ", 24 | "No" : "ບໍ່", 25 | "File" : "ຟາຍ", 26 | "The password is wrong. Try again." : "ລະຫັດບໍ່ຖືກຕ້ອງ. ລອງໃໝ່ອີກຄັ້ງ.", 27 | "Password" : "ລະຫັດຜ່ານ", 28 | "Favorites" : "ລາຍການທີ່ມັກ", 29 | "Translate" : "ແປ", 30 | "Back" : "ຫຼັງ", 31 | "Settings" : "ການຕັ້ງຄ່າ", 32 | "Name" : "ຊື່", 33 | "Copy" : "ສຳເນົາ", 34 | "Daily" : "ລາຍວັນ", 35 | "Hourly" : "ຊົ່ວໂມງ", 36 | "Unshare" : "ຍົກເລີກການແບ່ງປັນ", 37 | "Password protection" : "ລະຫັດປ້ອງກັນ", 38 | "Copy link" : "ສຳເນົາລິງ", 39 | "Sort by" : "ຈັດລຽງໂດຍ", 40 | "Create" : "ສ້າງ" 41 | }, 42 | "nplurals=1; plural=0;"); 43 | -------------------------------------------------------------------------------- /l10n/lo.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "ລຶບ", 3 | "Default" : "ເລີ່ມຕົ້ນ", 4 | "Remove from favorites" : "ຍ້າຍຈາກລາຍການທີ່ມັກ", 5 | "Delete folder" : "ລຶບໂຟນເດີ", 6 | "Add to favorites" : "ເພີ່ມລາຍການທີ່ມັກ", 7 | "Share" : "ແບ່ງປັນ", 8 | "Save" : "ບັນທຶກ", 9 | "Download" : "ດາວໂຫລດ", 10 | "Report" : "ລາຍງານ", 11 | "Share link" : "ແບ່ງປັນລິງ", 12 | "Link copied" : "ສຳເນົາລິງ", 13 | "Type" : "ພິມ", 14 | "Notification" : "ແຈ້ງການ", 15 | "Date" : "ວັນທີ", 16 | "New in" : "ໃຫມ່", 17 | "View changelog" : "ເບິ່ງການປ່ຽນແປງ", 18 | "OK" : "ຕົກລົງ", 19 | "Cancel" : "ຍົກເລີກ", 20 | "Search" : "ຄົ້ນຫາ", 21 | "Yes" : "ແມ່ນແລ້ວ", 22 | "No" : "ບໍ່", 23 | "File" : "ຟາຍ", 24 | "The password is wrong. Try again." : "ລະຫັດບໍ່ຖືກຕ້ອງ. ລອງໃໝ່ອີກຄັ້ງ.", 25 | "Password" : "ລະຫັດຜ່ານ", 26 | "Favorites" : "ລາຍການທີ່ມັກ", 27 | "Translate" : "ແປ", 28 | "Back" : "ຫຼັງ", 29 | "Settings" : "ການຕັ້ງຄ່າ", 30 | "Name" : "ຊື່", 31 | "Copy" : "ສຳເນົາ", 32 | "Daily" : "ລາຍວັນ", 33 | "Hourly" : "ຊົ່ວໂມງ", 34 | "Unshare" : "ຍົກເລີກການແບ່ງປັນ", 35 | "Password protection" : "ລະຫັດປ້ອງກັນ", 36 | "Copy link" : "ສຳເນົາລິງ", 37 | "Sort by" : "ຈັດລຽງໂດຍ", 38 | "Create" : "ສ້າງ" 39 | },"pluralForm" :"nplurals=1; plural=0;" 40 | } -------------------------------------------------------------------------------- /l10n/si.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "analytics", 3 | { 4 | "Value" : "අගය", 5 | "Loading" : "පූරණය වෙමින්", 6 | "Filter" : "පෙරහන", 7 | "Share" : "බෙදාගන්න", 8 | "Download" : "බාගන්න", 9 | "New" : "නව", 10 | "Link copied" : "සබැඳිය පිටපත් කළා", 11 | "Date" : "දිනය", 12 | "Year" : "වර්ෂය", 13 | "OK" : "හරි", 14 | "Cancel" : "අවලංගු කරන්න", 15 | "Search" : "සොයන්න", 16 | "Yes" : "ඔව්", 17 | "No" : "නැහැ", 18 | "Authentication" : "සත්‍යාපනය", 19 | "Version" : "අනුවාදය", 20 | "File" : "ගොනුව", 21 | "Announcements" : "නිවේදන", 22 | "copy" : "පිටපත්", 23 | "Password" : "මුර පදය", 24 | "Favorites" : "ප්‍රියතම", 25 | "Translate" : "පරිවර්තනය", 26 | "Back" : "ආපසු", 27 | "Settings" : "සැකසුම්", 28 | "Name" : "නම", 29 | "Update" : "යාවත්කාල", 30 | "Description" : "විස්තරය", 31 | "Others" : "වෙනත්", 32 | "Daily" : "දිනපතා", 33 | "Password protection" : "මුරපද ආරක්ෂාව", 34 | "Copy link" : "සබැඳිය පිටපත් කරන්න", 35 | "Additional settings" : "අමතර සැකසුම්", 36 | "Create" : "සාදන්න" 37 | }, 38 | "nplurals=2; plural=(n != 1);"); 39 | -------------------------------------------------------------------------------- /l10n/si.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Value" : "අගය", 3 | "Loading" : "පූරණය වෙමින්", 4 | "Filter" : "පෙරහන", 5 | "Share" : "බෙදාගන්න", 6 | "Download" : "බාගන්න", 7 | "New" : "නව", 8 | "Link copied" : "සබැඳිය පිටපත් කළා", 9 | "Date" : "දිනය", 10 | "Year" : "වර්ෂය", 11 | "OK" : "හරි", 12 | "Cancel" : "අවලංගු කරන්න", 13 | "Search" : "සොයන්න", 14 | "Yes" : "ඔව්", 15 | "No" : "නැහැ", 16 | "Authentication" : "සත්‍යාපනය", 17 | "Version" : "අනුවාදය", 18 | "File" : "ගොනුව", 19 | "Announcements" : "නිවේදන", 20 | "copy" : "පිටපත්", 21 | "Password" : "මුර පදය", 22 | "Favorites" : "ප්‍රියතම", 23 | "Translate" : "පරිවර්තනය", 24 | "Back" : "ආපසු", 25 | "Settings" : "සැකසුම්", 26 | "Name" : "නම", 27 | "Update" : "යාවත්කාල", 28 | "Description" : "විස්තරය", 29 | "Others" : "වෙනත්", 30 | "Daily" : "දිනපතා", 31 | "Password protection" : "මුරපද ආරක්ෂාව", 32 | "Copy link" : "සබැඳිය පිටපත් කරන්න", 33 | "Additional settings" : "අමතර සැකසුම්", 34 | "Create" : "සාදන්න" 35 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 36 | } -------------------------------------------------------------------------------- /l10n/ta.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "analytics", 3 | { 4 | "Value" : "Value", 5 | "Delete" : "நீக்குக", 6 | "Done" : "Done", 7 | "Loading" : "Loading", 8 | "Remove from favorites" : "Remove from favorites", 9 | "Delete folder" : "கோப்பை அழிக்க", 10 | "Add to favorites" : "Add to favorites", 11 | "Share" : "பகிர்வு", 12 | "Save" : "சேமிக்க ", 13 | "Download" : "பதிவிறக்குக", 14 | "New" : "புதிய", 15 | "Share link" : "Share link", 16 | "Type" : "வகை", 17 | "Date" : "Date", 18 | "OK" : "சரி ", 19 | "Cancel" : "இரத்து செய்க", 20 | "Search" : "Search", 21 | "Yes" : "Yes", 22 | "No" : "No", 23 | "File" : "File", 24 | "Password" : "கடவுச்சொல்", 25 | "Favorites" : "விருப்பங்கள்", 26 | "Translate" : "Translate", 27 | "Back" : "பின்னுக்கு", 28 | "Settings" : "அமைப்புகள்", 29 | "Name" : "பெயர்", 30 | "Update" : "இற்றைப்படுத்தல்", 31 | "Export" : "ஏற்றுமதி", 32 | "Description" : "விவரிப்பு", 33 | "Import" : "இறக்குமதி", 34 | "Title" : "தலைப்பு", 35 | "Unshare" : "பகிரப்படாதது", 36 | "Password protection" : "Password protection", 37 | "Create" : "உருவாக்குக" 38 | }, 39 | "nplurals=2; plural=(n != 1);"); 40 | -------------------------------------------------------------------------------- /l10n/ta.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Value" : "Value", 3 | "Delete" : "நீக்குக", 4 | "Done" : "Done", 5 | "Loading" : "Loading", 6 | "Remove from favorites" : "Remove from favorites", 7 | "Delete folder" : "கோப்பை அழிக்க", 8 | "Add to favorites" : "Add to favorites", 9 | "Share" : "பகிர்வு", 10 | "Save" : "சேமிக்க ", 11 | "Download" : "பதிவிறக்குக", 12 | "New" : "புதிய", 13 | "Share link" : "Share link", 14 | "Type" : "வகை", 15 | "Date" : "Date", 16 | "OK" : "சரி ", 17 | "Cancel" : "இரத்து செய்க", 18 | "Search" : "Search", 19 | "Yes" : "Yes", 20 | "No" : "No", 21 | "File" : "File", 22 | "Password" : "கடவுச்சொல்", 23 | "Favorites" : "விருப்பங்கள்", 24 | "Translate" : "Translate", 25 | "Back" : "பின்னுக்கு", 26 | "Settings" : "அமைப்புகள்", 27 | "Name" : "பெயர்", 28 | "Update" : "இற்றைப்படுத்தல்", 29 | "Export" : "ஏற்றுமதி", 30 | "Description" : "விவரிப்பு", 31 | "Import" : "இறக்குமதி", 32 | "Title" : "தலைப்பு", 33 | "Unshare" : "பகிரப்படாதது", 34 | "Password protection" : "Password protection", 35 | "Create" : "உருவாக்குக" 36 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 37 | } -------------------------------------------------------------------------------- /l10n/tk.js: -------------------------------------------------------------------------------- 1 | OC.L10N.register( 2 | "analytics", 3 | { 4 | "Delete" : "Pozmak", 5 | "Default" : "Bellenen", 6 | "Add to favorites" : "Saýlananlara goşuň", 7 | "Share" : "Paýlaş", 8 | "Save" : "Saklamak", 9 | "Download" : "Göçürip almak", 10 | "Report" : "Hasabat ugradyň", 11 | "Share link" : "Baglanyşyk paýlaş", 12 | "Link copied" : "Link-yň nusgasy alyndy", 13 | "Type" : "Görnüşi", 14 | "OK" : "Bolýar", 15 | "Cancel" : "ýatyrmak", 16 | "Search" : "Gözlemek", 17 | "Yes" : "Hawa", 18 | "No" : "Ýok", 19 | "File" : "Faýl", 20 | "Password" : "Açarsöz", 21 | "Favorites" : "Halanýanlar", 22 | "Translate" : "Terjime et", 23 | "Back" : "Yzyna", 24 | "Settings" : "Sazlamalar", 25 | "Name" : "Ady", 26 | "Update" : "Täzelemek", 27 | "Copy" : "Göçüriň", 28 | "Unshare" : "Paýlaşma", 29 | "Copy link" : "Link-y nusgalaň", 30 | "Create" : "Dörediň" 31 | }, 32 | "nplurals=2; plural=(n != 1);"); 33 | -------------------------------------------------------------------------------- /l10n/tk.json: -------------------------------------------------------------------------------- 1 | { "translations": { 2 | "Delete" : "Pozmak", 3 | "Default" : "Bellenen", 4 | "Add to favorites" : "Saýlananlara goşuň", 5 | "Share" : "Paýlaş", 6 | "Save" : "Saklamak", 7 | "Download" : "Göçürip almak", 8 | "Report" : "Hasabat ugradyň", 9 | "Share link" : "Baglanyşyk paýlaş", 10 | "Link copied" : "Link-yň nusgasy alyndy", 11 | "Type" : "Görnüşi", 12 | "OK" : "Bolýar", 13 | "Cancel" : "ýatyrmak", 14 | "Search" : "Gözlemek", 15 | "Yes" : "Hawa", 16 | "No" : "Ýok", 17 | "File" : "Faýl", 18 | "Password" : "Açarsöz", 19 | "Favorites" : "Halanýanlar", 20 | "Translate" : "Terjime et", 21 | "Back" : "Yzyna", 22 | "Settings" : "Sazlamalar", 23 | "Name" : "Ady", 24 | "Update" : "Täzelemek", 25 | "Copy" : "Göçüriň", 26 | "Unshare" : "Paýlaşma", 27 | "Copy link" : "Link-y nusgalaň", 28 | "Create" : "Dörediň" 29 | },"pluralForm" :"nplurals=2; plural=(n != 1);" 30 | } -------------------------------------------------------------------------------- /lib/BackgroundJob/Daily.php: -------------------------------------------------------------------------------- 1 | setInterval((60 * 60 * 24) - 120); // 2 minutes because exact times would drift to the next cron execution 29 | $this->logger = $logger; 30 | $this->DataloadService = $DataloadService; 31 | } 32 | 33 | public function run($arguments) 34 | { 35 | try { 36 | $this->DataloadService->executeBySchedule('d'); 37 | } catch (\Exception $e) { 38 | // no action 39 | } 40 | } 41 | 42 | } -------------------------------------------------------------------------------- /lib/BackgroundJob/Hourly.php: -------------------------------------------------------------------------------- 1 | setInterval((60 * 60) - 120); // 2 minutes because exact times would drift to the next cron execution 30 | $this->logger = $logger; 31 | $this->DataloadService = $DataloadService; 32 | } 33 | 34 | public function run($arguments) 35 | { 36 | try { 37 | $this->DataloadService->executeBySchedule('h'); 38 | } catch (\Exception $e) { 39 | // no action 40 | } 41 | } 42 | 43 | } -------------------------------------------------------------------------------- /lib/Datasource/DatasourceEvent.php: -------------------------------------------------------------------------------- 1 | collections[] = $datasource; 33 | } 34 | 35 | /** 36 | * @return \Closure[] 37 | * @since 9.1.0 38 | */ 39 | public function getDataSources() 40 | { 41 | return $this->collections; 42 | } 43 | } -------------------------------------------------------------------------------- /lib/Flow/RegisterOperationsListener.php: -------------------------------------------------------------------------------- 1 | 19 | */ 20 | class RegisterOperationsListener implements IEventListener { 21 | 22 | public function __construct( 23 | private Operation $operation, 24 | ) { 25 | } 26 | 27 | #[\Override] 28 | public function handle(Event $event): void { 29 | if (!($event instanceof RegisterOperationsEvent)) { 30 | // Unrelated 31 | return; 32 | } 33 | 34 | $event->registerOperation($this->operation); 35 | Util::addScript('analytics', 'flow'); 36 | } 37 | } -------------------------------------------------------------------------------- /lib/Listener/LoadAdditionalScripts.php: -------------------------------------------------------------------------------- 1 | service = $service; 26 | } 27 | public function handle(Event $event): void 28 | { 29 | if(!$event instanceof UserDeletedEvent) { 30 | return; 31 | } 32 | 33 | $uid = $event->getUser()->getUID(); 34 | $this->service->deleteUserData($uid); 35 | } 36 | } -------------------------------------------------------------------------------- /lib/Migration/Version5002Date20241022100000.php: -------------------------------------------------------------------------------- 1 | getTable('analytics_share'); 36 | $table->addColumn('created_at', Types::DATETIME, [ 37 | 'notnull' => false, 38 | ]); 39 | return $schema; 40 | } 41 | } -------------------------------------------------------------------------------- /lib/ShareReview/ShareReviewListener.php: -------------------------------------------------------------------------------- 1 | registerSource(ShareReviewSource::class); 27 | } 28 | } -------------------------------------------------------------------------------- /lib/WhatsNew/WhatsNewResult.php: -------------------------------------------------------------------------------- 1 | addType('version', 'string'); 44 | $this->addType('etag', 'string'); 45 | $this->addType('lastCheck', 'int'); 46 | $this->addType('data', 'string'); 47 | } 48 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "analytics", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /sample_data/sample_json.json: -------------------------------------------------------------------------------- 1 | { 2 | "json testdata": { 3 | "test 99": "99", 4 | "test 88": "88", 5 | "test 77": "77" 6 | }, 7 | "json array data": [ 8 | { 9 | "a": "a1", 10 | "b": "b1", 11 | "c": "c1" 12 | }, 13 | { 14 | "a": "a2", 15 | "b": "b2", 16 | "c": "c2" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /screenshots/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/screenshots/architecture.png -------------------------------------------------------------------------------- /screenshots/charts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/screenshots/charts.png -------------------------------------------------------------------------------- /screenshots/datasource regex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/screenshots/datasource regex.png -------------------------------------------------------------------------------- /screenshots/flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/screenshots/flow.png -------------------------------------------------------------------------------- /screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/screenshots/logo.png -------------------------------------------------------------------------------- /screenshots/settings_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/screenshots/settings_back.png -------------------------------------------------------------------------------- /screenshots/settings_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Rello/analytics/8c8ba390aed1bd9ab79b58321e537c92deaba520/screenshots/settings_menu.png -------------------------------------------------------------------------------- /templates/part.content_advanced.php: -------------------------------------------------------------------------------- 1 | 10 |

t('Dataset maintenance')); ?>

11 | 23 | -------------------------------------------------------------------------------- /templates/part.navigation.php: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /templates/public.php: -------------------------------------------------------------------------------- 1 | 26 | 27 |
28 | inc('part.content')); ?> 29 |
-------------------------------------------------------------------------------- /vendor/autoload.php: -------------------------------------------------------------------------------- 1 | array($vendorDir . '/psr/simple-cache/src'), 10 | 'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'), 11 | 'MyCLabs\\Enum\\' => array($vendorDir . '/myclabs/php-enum/src'), 12 | 'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'), 13 | 'Complex\\' => array($vendorDir . '/markbaker/complex/classes/src'), 14 | ); 15 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/Bootstrap.php: -------------------------------------------------------------------------------- 1 | regex = $regex; 14 | parent::__construct($it, $regex); 15 | } 16 | } 17 | 18 | class FilenameFilter extends FilesystemRegexFilter 19 | { 20 | // Filter files against the regex 21 | public function accept() 22 | { 23 | return (!$this->isFile() || preg_match($this->regex, $this->getFilename())); 24 | } 25 | } 26 | 27 | 28 | $srcFolder = __DIR__ . DIRECTORY_SEPARATOR . 'src'; 29 | $srcDirectory = new RecursiveDirectoryIterator($srcFolder); 30 | 31 | $filteredFileList = new FilenameFilter($srcDirectory, '/(?:php)$/i'); 32 | $filteredFileList = new FilenameFilter($filteredFileList, '/^(?!.*(Complex|Exception)\.php).*$/i'); 33 | 34 | foreach (new RecursiveIteratorIterator($filteredFileList) as $file) { 35 | if ($file->isFile()) { 36 | include_once $file; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/Exception.php: -------------------------------------------------------------------------------- 1 | getReal() - $invsqrt->getImaginary(), 30 | $complex->getImaginary() + $invsqrt->getReal() 31 | ); 32 | $log = ln($adjust); 33 | 34 | return new Complex( 35 | $log->getImaginary(), 36 | -1 * $log->getReal() 37 | ); 38 | } 39 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/acosh.php: -------------------------------------------------------------------------------- 1 | isReal() && ($complex->getReal() > 1)) { 24 | return new Complex(\acosh($complex->getReal())); 25 | } 26 | 27 | $acosh = acos($complex) 28 | ->reverse(); 29 | if ($acosh->getReal() < 0.0) { 30 | $acosh = $acosh->invertReal(); 31 | } 32 | 33 | return $acosh; 34 | } 35 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/acot.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0 && $complex->getImaginary() == 0.0) { 25 | return new Complex(INF); 26 | } 27 | 28 | return asin(inverse($complex)); 29 | } 30 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/acsch.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0 && $complex->getImaginary() == 0.0) { 25 | return new Complex(INF); 26 | } 27 | 28 | return asinh(inverse($complex)); 29 | } 30 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/argument.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0 && $complex->getImaginary() == 0.0) { 25 | return new Complex(INF); 26 | } 27 | 28 | return acos(inverse($complex)); 29 | } 30 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/asech.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0 && $complex->getImaginary() == 0.0) { 25 | return new Complex(INF); 26 | } 27 | 28 | return acosh(inverse($complex)); 29 | } 30 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/asin.php: -------------------------------------------------------------------------------- 1 | getReal() - $complex->getImaginary(), 29 | $invsqrt->getImaginary() + $complex->getReal() 30 | ); 31 | $log = ln($adjust); 32 | 33 | return new Complex( 34 | $log->getImaginary(), 35 | -1 * $log->getReal() 36 | ); 37 | } 38 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/asinh.php: -------------------------------------------------------------------------------- 1 | isReal() && ($complex->getReal() > 1)) { 24 | return new Complex(\asinh($complex->getReal())); 25 | } 26 | 27 | $asinh = clone $complex; 28 | $asinh = $asinh->reverse() 29 | ->invertReal(); 30 | $asinh = asin($asinh); 31 | return $asinh->reverse() 32 | ->invertImaginary(); 33 | } 34 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/atanh.php: -------------------------------------------------------------------------------- 1 | isReal()) { 24 | $real = $complex->getReal(); 25 | if ($real >= -1.0 && $real <= 1.0) { 26 | return new Complex(\atanh($real)); 27 | } else { 28 | return new Complex(\atanh(1 / $real), (($real < 0.0) ? M_PI_2 : -1 * M_PI_2)); 29 | } 30 | } 31 | 32 | $iComplex = clone $complex; 33 | $iComplex = $iComplex->invertImaginary() 34 | ->reverse(); 35 | return atan($iComplex) 36 | ->invertReal() 37 | ->reverse(); 38 | } 39 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/conjugate.php: -------------------------------------------------------------------------------- 1 | getReal(), 25 | -1 * $complex->getImaginary(), 26 | $complex->getSuffix() 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/cos.php: -------------------------------------------------------------------------------- 1 | isReal()) { 24 | return new Complex(\cos($complex->getReal())); 25 | } 26 | 27 | return conjugate( 28 | new Complex( 29 | \cos($complex->getReal()) * \cosh($complex->getImaginary()), 30 | \sin($complex->getReal()) * \sinh($complex->getImaginary()), 31 | $complex->getSuffix() 32 | ) 33 | ); 34 | } 35 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/cosh.php: -------------------------------------------------------------------------------- 1 | isReal()) { 24 | return new Complex(\cosh($complex->getReal())); 25 | } 26 | 27 | return new Complex( 28 | \cosh($complex->getReal()) * \cos($complex->getImaginary()), 29 | \sinh($complex->getReal()) * \sin($complex->getImaginary()), 30 | $complex->getSuffix() 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/cot.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0 && $complex->getImaginary() == 0.0) { 25 | return new Complex(INF); 26 | } 27 | 28 | return inverse(tan($complex)); 29 | } 30 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/coth.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0 && $complex->getImaginary() == 0.0) { 25 | return new Complex(INF); 26 | } 27 | 28 | return inverse(sin($complex)); 29 | } 30 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/csch.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0 && $complex->getImaginary() == 0.0) { 25 | return new Complex(INF); 26 | } 27 | 28 | return inverse(sinh($complex)); 29 | } 30 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/exp.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0) && (\abs($complex->getImaginary()) == M_PI)) { 24 | return new Complex(-1.0, 0.0); 25 | } 26 | 27 | $rho = \exp($complex->getReal()); 28 | 29 | return new Complex( 30 | $rho * \cos($complex->getImaginary()), 31 | $rho * \sin($complex->getImaginary()), 32 | $complex->getSuffix() 33 | ); 34 | } 35 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/inverse.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0 && $complex->getImaginary() == 0.0) { 25 | throw new \InvalidArgumentException('Division by zero'); 26 | } 27 | 28 | return $complex->divideInto(1.0); 29 | } 30 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/ln.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0) && ($complex->getImaginary() == 0.0)) { 25 | throw new \InvalidArgumentException(); 26 | } 27 | 28 | return new Complex( 29 | \log(rho($complex)), 30 | theta($complex), 31 | $complex->getSuffix() 32 | ); 33 | } 34 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/log10.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0) && ($complex->getImaginary() == 0.0)) { 25 | throw new \InvalidArgumentException(); 26 | } elseif (($complex->getReal() > 0.0) && ($complex->getImaginary() == 0.0)) { 27 | return new Complex(\log10($complex->getReal()), 0.0, $complex->getSuffix()); 28 | } 29 | 30 | return ln($complex) 31 | ->multiply(\log10(Complex::EULER)); 32 | } 33 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/log2.php: -------------------------------------------------------------------------------- 1 | getReal() == 0.0) && ($complex->getImaginary() == 0.0)) { 25 | throw new \InvalidArgumentException(); 26 | } elseif (($complex->getReal() > 0.0) && ($complex->getImaginary() == 0.0)) { 27 | return new Complex(\log($complex->getReal(), 2), 0.0, $complex->getSuffix()); 28 | } 29 | 30 | return ln($complex) 31 | ->multiply(\log(Complex::EULER, 2)); 32 | } 33 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/negative.php: -------------------------------------------------------------------------------- 1 | getReal(), 28 | -1 * $complex->getImaginary(), 29 | $complex->getSuffix() 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/rho.php: -------------------------------------------------------------------------------- 1 | getReal() * $complex->getReal()) + 26 | ($complex->getImaginary() * $complex->getImaginary()) 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/sec.php: -------------------------------------------------------------------------------- 1 | isReal()) { 24 | return new Complex(\sin($complex->getReal())); 25 | } 26 | 27 | return new Complex( 28 | \sin($complex->getReal()) * \cosh($complex->getImaginary()), 29 | \cos($complex->getReal()) * \sinh($complex->getImaginary()), 30 | $complex->getSuffix() 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/sinh.php: -------------------------------------------------------------------------------- 1 | isReal()) { 24 | return new Complex(\sinh($complex->getReal())); 25 | } 26 | 27 | return new Complex( 28 | \sinh($complex->getReal()) * \cos($complex->getImaginary()), 29 | \cosh($complex->getReal()) * \sin($complex->getImaginary()), 30 | $complex->getSuffix() 31 | ); 32 | } 33 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/sqrt.php: -------------------------------------------------------------------------------- 1 | getSuffix()); 29 | } 30 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/classes/src/functions/tanh.php: -------------------------------------------------------------------------------- 1 | getReal(); 24 | $imaginary = $complex->getImaginary(); 25 | $divisor = \cos($imaginary) * \cos($imaginary) + \sinh($real) * \sinh($real); 26 | if ($divisor == 0.0) { 27 | throw new \InvalidArgumentException('Division by zero'); 28 | } 29 | 30 | return new Complex( 31 | \sinh($real) * \cosh($real) / $divisor, 32 | 0.5 * \sin(2 * $imaginary) / $divisor, 33 | $complex->getSuffix() 34 | ); 35 | } 36 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/examples/testFunctions.php: -------------------------------------------------------------------------------- 1 | getMessage(), PHP_EOL; 48 | } 49 | } 50 | echo PHP_EOL; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/examples/testOperations.php: -------------------------------------------------------------------------------- 1 | ', $result, PHP_EOL; 21 | 22 | echo PHP_EOL; 23 | 24 | echo 'Subtraction', PHP_EOL; 25 | 26 | $result = \Complex\subtract(...$values); 27 | echo '=> ', $result, PHP_EOL; 28 | 29 | echo PHP_EOL; 30 | 31 | echo 'Multiplication', PHP_EOL; 32 | 33 | $result = \Complex\multiply(...$values); 34 | echo '=> ', $result, PHP_EOL; 35 | -------------------------------------------------------------------------------- /vendor/markbaker/complex/license.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | ===================== 3 | 4 | Copyright © `2017` `Mark Baker` 5 | 6 | Permission is hereby granted, free of charge, to any person 7 | obtaining a copy of this software and associated documentation 8 | files (the “Software”), to deal in the Software without 9 | restriction, including without limitation the rights to use, 10 | copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the 12 | Software is furnished to do so, subject to the following 13 | conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 20 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 | OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /vendor/markbaker/matrix/classes/src/Decomposition/Decomposition.php: -------------------------------------------------------------------------------- 1 | $matrixValues The matrices to add 19 | * @return Matrix 20 | * @throws Exception 21 | */ 22 | function add(...$matrixValues): Matrix 23 | { 24 | if (count($matrixValues) < 2) { 25 | throw new Exception('Addition operation requires at least 2 arguments'); 26 | } 27 | 28 | $matrix = array_shift($matrixValues); 29 | 30 | if (is_array($matrix)) { 31 | $matrix = new Matrix($matrix); 32 | } 33 | if (!$matrix instanceof Matrix) { 34 | throw new Exception('Addition arguments must be Matrix or array'); 35 | } 36 | 37 | $result = new Addition($matrix); 38 | 39 | foreach ($matrixValues as $matrix) { 40 | $result->execute($matrix); 41 | } 42 | 43 | return $result->result(); 44 | } 45 | -------------------------------------------------------------------------------- /vendor/markbaker/matrix/classes/src/Operations/directsum.php: -------------------------------------------------------------------------------- 1 | $matrixValues The matrices to add 19 | * @return Matrix 20 | * @throws Exception 21 | */ 22 | function directsum(...$matrixValues): Matrix 23 | { 24 | if (count($matrixValues) < 2) { 25 | throw new Exception('DirectSum operation requires at least 2 arguments'); 26 | } 27 | 28 | $matrix = array_shift($matrixValues); 29 | 30 | if (is_array($matrix)) { 31 | $matrix = new Matrix($matrix); 32 | } 33 | if (!$matrix instanceof Matrix) { 34 | throw new Exception('DirectSum arguments must be Matrix or array'); 35 | } 36 | 37 | $result = new DirectSum($matrix); 38 | 39 | foreach ($matrixValues as $matrix) { 40 | $result->execute($matrix); 41 | } 42 | 43 | return $result->result(); 44 | } 45 | -------------------------------------------------------------------------------- /vendor/markbaker/matrix/classes/src/Operations/divideby.php: -------------------------------------------------------------------------------- 1 | $matrixValues The matrices to divide 19 | * @return Matrix 20 | * @throws Exception 21 | */ 22 | function divideby(...$matrixValues): Matrix 23 | { 24 | if (count($matrixValues) < 2) { 25 | throw new Exception('Division operation requires at least 2 arguments'); 26 | } 27 | 28 | $matrix = array_shift($matrixValues); 29 | 30 | if (is_array($matrix)) { 31 | $matrix = new Matrix($matrix); 32 | } 33 | if (!$matrix instanceof Matrix) { 34 | throw new Exception('Division arguments must be Matrix or array'); 35 | } 36 | 37 | $result = new Division($matrix); 38 | 39 | foreach ($matrixValues as $matrix) { 40 | $result->execute($matrix); 41 | } 42 | 43 | return $result->result(); 44 | } 45 | -------------------------------------------------------------------------------- /vendor/markbaker/matrix/classes/src/Operations/divideinto.php: -------------------------------------------------------------------------------- 1 | $matrixValues The numbers to divide 19 | * @return Matrix 20 | * @throws Exception 21 | */ 22 | function divideinto(...$matrixValues): Matrix 23 | { 24 | if (count($matrixValues) < 2) { 25 | throw new Exception('Division operation requires at least 2 arguments'); 26 | } 27 | 28 | $matrix = array_pop($matrixValues); 29 | $matrixValues = array_reverse($matrixValues); 30 | 31 | if (is_array($matrix)) { 32 | $matrix = new Matrix($matrix); 33 | } 34 | if (!$matrix instanceof Matrix) { 35 | throw new Exception('Division arguments must be Matrix or array'); 36 | } 37 | 38 | $result = new Division($matrix); 39 | 40 | foreach ($matrixValues as $matrix) { 41 | $result->execute($matrix); 42 | } 43 | 44 | return $result->result(); 45 | } 46 | -------------------------------------------------------------------------------- /vendor/markbaker/matrix/classes/src/Operations/multiply.php: -------------------------------------------------------------------------------- 1 | $matrixValues The matrices to multiply 19 | * @return Matrix 20 | * @throws Exception 21 | */ 22 | function multiply(...$matrixValues): Matrix 23 | { 24 | if (count($matrixValues) < 2) { 25 | throw new Exception('Multiplication operation requires at least 2 arguments'); 26 | } 27 | 28 | $matrix = array_shift($matrixValues); 29 | 30 | if (is_array($matrix)) { 31 | $matrix = new Matrix($matrix); 32 | } 33 | if (!$matrix instanceof Matrix) { 34 | throw new Exception('Multiplication arguments must be Matrix or array'); 35 | } 36 | 37 | $result = new Multiplication($matrix); 38 | 39 | foreach ($matrixValues as $matrix) { 40 | $result->execute($matrix); 41 | } 42 | 43 | return $result->result(); 44 | } 45 | -------------------------------------------------------------------------------- /vendor/markbaker/matrix/classes/src/Operations/subtract.php: -------------------------------------------------------------------------------- 1 | $matrixValues The matrices to subtract 19 | * @return Matrix 20 | * @throws Exception 21 | */ 22 | function subtract(...$matrixValues): Matrix 23 | { 24 | if (count($matrixValues) < 2) { 25 | throw new Exception('Subtraction operation requires at least 2 arguments'); 26 | } 27 | 28 | $matrix = array_shift($matrixValues); 29 | 30 | if (is_array($matrix)) { 31 | $matrix = new Matrix($matrix); 32 | } 33 | if (!$matrix instanceof Matrix) { 34 | throw new Exception('Subtraction arguments must be Matrix or array'); 35 | } 36 | 37 | $result = new Subtraction($matrix); 38 | 39 | foreach ($matrixValues as $matrix) { 40 | $result->execute($matrix); 41 | } 42 | 43 | return $result->result(); 44 | } 45 | -------------------------------------------------------------------------------- /vendor/markbaker/matrix/classes/src/Operators/Division.php: -------------------------------------------------------------------------------- 1 | multiplyMatrix($value); 32 | } elseif (is_numeric($value)) { 33 | return $this->multiplyScalar(1 / $value); 34 | } 35 | 36 | throw new Exception('Invalid argument for division'); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vendor/markbaker/matrix/examples/test.php: -------------------------------------------------------------------------------- 1 | solve($target); 24 | 25 | echo 'X', PHP_EOL; 26 | var_export($X->toArray()); 27 | echo PHP_EOL; 28 | 29 | $resolve = $matrix->multiply($X); 30 | 31 | echo 'Resolve', PHP_EOL; 32 | var_export($resolve->toArray()); 33 | echo PHP_EOL; 34 | -------------------------------------------------------------------------------- /vendor/markbaker/matrix/infection.json.dist: -------------------------------------------------------------------------------- 1 | { 2 | "timeout": 1, 3 | "source": { 4 | "directories": [ 5 | "classes\/src" 6 | ] 7 | }, 8 | "logs": { 9 | "text": "build/infection/text.log", 10 | "summary": "build/infection/summary.log", 11 | "debug": "build/infection/debug.log", 12 | "perMutator": "build/infection/perMutator.md" 13 | }, 14 | "mutators": { 15 | "@default": true 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /vendor/markbaker/matrix/license.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | ===================== 3 | 4 | Copyright © `2018` `Mark Baker` 5 | 6 | Permission is hereby granted, free of charge, to any person 7 | obtaining a copy of this software and associated documentation 8 | files (the “Software”), to deal in the Software without 9 | restriction, including without limitation the rights to use, 10 | copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the 12 | Software is furnished to do so, subject to the following 13 | conditions: 14 | 15 | The above copyright notice and this permission notice shall be 16 | included in all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, 19 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 20 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 | OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /vendor/markbaker/matrix/phpstan.neon: -------------------------------------------------------------------------------- 1 | parameters: 2 | ignoreErrors: 3 | - '#Property [A-Za-z\\]+::\$[A-Za-z]+ has no typehint specified#' 4 | - '#Method [A-Za-z\\]+::[A-Za-z]+\(\) has no return typehint specified#' 5 | - '#Method [A-Za-z\\]+::[A-Za-z]+\(\) has parameter \$[A-Za-z0-9]+ with no typehint specified#' 6 | checkMissingIterableValueType: false 7 | -------------------------------------------------------------------------------- /vendor/myclabs/php-enum/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 My C-Labs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 6 | associated documentation files (the "Software"), to deal in the Software without restriction, 7 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 9 | subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all copies or substantial 12 | portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT 15 | NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 16 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 17 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 18 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | -------------------------------------------------------------------------------- /vendor/myclabs/php-enum/SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Only the latest stable release is supported. 6 | 7 | ## Reporting a Vulnerability 8 | 9 | To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). 10 | 11 | Tidelift will coordinate the fix and disclosure. 12 | -------------------------------------------------------------------------------- /vendor/myclabs/php-enum/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "myclabs/php-enum", 3 | "type": "library", 4 | "description": "PHP Enum implementation", 5 | "keywords": ["enum"], 6 | "homepage": "http://github.com/myclabs/php-enum", 7 | "license": "MIT", 8 | "authors": [ 9 | { 10 | "name": "PHP Enum contributors", 11 | "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" 12 | } 13 | ], 14 | "autoload": { 15 | "psr-4": { 16 | "MyCLabs\\Enum\\": "src/" 17 | } 18 | }, 19 | "autoload-dev": { 20 | "psr-4": { 21 | "MyCLabs\\Tests\\Enum\\": "tests/" 22 | } 23 | }, 24 | "require": { 25 | "php": "^7.3 || ^8.0", 26 | "ext-json": "*" 27 | }, 28 | "require-dev": { 29 | "phpunit/phpunit": "^9.5", 30 | "squizlabs/php_codesniffer": "1.*", 31 | "vimeo/psalm": "^4.5.1" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /vendor/myclabs/php-enum/psalm.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/.phpcs.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | samples 6 | src 7 | tests 8 | 9 | samples/Header.php 10 | */tests/Core/*/*Test\.(inc|css|js)$ 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 PhpSpreadsheet Authors 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 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Category.php: -------------------------------------------------------------------------------- 1 | self::DOW_SUNDAY, 28 | self::DOW_MONDAY, 29 | self::STARTWEEK_MONDAY_ALT => self::DOW_MONDAY, 30 | self::DOW_TUESDAY, 31 | self::DOW_WEDNESDAY, 32 | self::DOW_THURSDAY, 33 | self::DOW_FRIDAY, 34 | self::DOW_SATURDAY, 35 | self::DOW_SUNDAY, 36 | self::STARTWEEK_MONDAY_ISO => self::STARTWEEK_MONDAY_ISO, 37 | ]; 38 | } 39 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Engine/Operands/Operand.php: -------------------------------------------------------------------------------- 1 | line = $line; 18 | $e->file = $file; 19 | 20 | throw $e; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/ExceptionHandler.php: -------------------------------------------------------------------------------- 1 | = $maturity) { 19 | throw new Exception(ExcelError::NAN()); 20 | } 21 | } 22 | 23 | public static function validateRedemption(mixed $redemption): float 24 | { 25 | $redemption = self::validateFloat($redemption); 26 | if ($redemption <= 0.0) { 27 | throw new Exception(ExcelError::NAN()); 28 | } 29 | 30 | return $redemption; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Internal/MakeMatrix.php: -------------------------------------------------------------------------------- 1 | getMessage(); 33 | } 34 | 35 | return abs($number); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Exp.php: -------------------------------------------------------------------------------- 1 | getMessage(); 33 | } 34 | 35 | return exp($number); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/IntClass.php: -------------------------------------------------------------------------------- 1 | getMessage(); 36 | } 37 | 38 | return (int) floor($number); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/MathTrig/Sign.php: -------------------------------------------------------------------------------- 1 | getMessage(); 34 | } 35 | 36 | return Helpers::returnSign($number); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/Distributions/DistributionValidations.php: -------------------------------------------------------------------------------- 1 | 1.0) { 16 | throw new Exception(ExcelError::NAN()); 17 | } 18 | 19 | return $probability; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Calculation/Statistical/MaxMinBase.php: -------------------------------------------------------------------------------- 1 | \d*\.?\d+)(?Ppt|px|em)?$/i'; 10 | 11 | protected bool $valid = false; 12 | 13 | protected string $size = ''; 14 | 15 | protected string $unit = ''; 16 | 17 | public function __construct(string $size) 18 | { 19 | if (1 === preg_match(self::REGEXP_SIZE_VALIDATION, $size, $matches)) { 20 | $this->valid = true; 21 | $this->size = $matches['size']; 22 | $this->unit = $matches['unit'] ?? 'pt'; 23 | } 24 | } 25 | 26 | public function valid(): bool 27 | { 28 | return $this->valid; 29 | } 30 | 31 | public function size(): string 32 | { 33 | return $this->size; 34 | } 35 | 36 | public function unit(): string 37 | { 38 | return $this->unit; 39 | } 40 | 41 | public function __toString(): string 42 | { 43 | return $this->size . $this->unit; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/IComparable.php: -------------------------------------------------------------------------------- 1 | value; 32 | } 33 | 34 | /** 35 | * Set the formula value. 36 | */ 37 | public function setFormula(string $formula): self 38 | { 39 | if (!empty($formula)) { 40 | $this->value = $formula; 41 | } 42 | 43 | return $this; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/DefaultReadFilter.php: -------------------------------------------------------------------------------- 1 | spreadsheet = $spreadsheet; 17 | $this->tableNs = $tableNs; 18 | } 19 | 20 | abstract public function read(DOMElement $workbookData): void; 21 | } 22 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color.php: -------------------------------------------------------------------------------- 1 | 'FF0000'] 16 | */ 17 | public static function map(int $color, array $palette, int $version): array 18 | { 19 | if ($color <= 0x07 || $color >= 0x40) { 20 | // special built-in color 21 | return Color\BuiltIn::lookup($color); 22 | } elseif (isset($palette[$color - 8])) { 23 | // palette color, color index 0x08 maps to pallete index 0 24 | return $palette[$color - 8]; 25 | } 26 | 27 | // default color table 28 | if ($version == Xls::XLS_BIFF8) { 29 | return Color\BIFF8::lookup($color); 30 | } 31 | 32 | // BIFF5 33 | return Color\BIFF5::lookup($color); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Color/BuiltIn.php: -------------------------------------------------------------------------------- 1 | '000000', 9 | 0x01 => 'FFFFFF', 10 | 0x02 => 'FF0000', 11 | 0x03 => '00FF00', 12 | 0x04 => '0000FF', 13 | 0x05 => 'FFFF00', 14 | 0x06 => 'FF00FF', 15 | 0x07 => '00FFFF', 16 | 0x40 => '000000', // system window text color 17 | 0x41 => 'FFFFFF', // system window background color 18 | ]; 19 | 20 | /** 21 | * Map built-in color to RGB value. 22 | * 23 | * @param int $color Indexed color 24 | */ 25 | public static function lookup(int $color): array 26 | { 27 | return ['rgb' => self::BUILTIN_COLOR_MAP[$color] ?? '000000']; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/ErrorCode.php: -------------------------------------------------------------------------------- 1 | '#NULL!', 9 | 0x07 => '#DIV/0!', 10 | 0x0F => '#VALUE!', 11 | 0x17 => '#REF!', 12 | 0x1D => '#NAME?', 13 | 0x24 => '#NUM!', 14 | 0x2A => '#N/A', 15 | ]; 16 | 17 | /** 18 | * Map error code, e.g. '#N/A'. 19 | */ 20 | public static function lookup(int $code): string|bool 21 | { 22 | return self::ERROR_CODE_MAP[$code] ?? false; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/Border.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | protected static array $borderStyleMap = [ 13 | 0x00 => StyleBorder::BORDER_NONE, 14 | 0x01 => StyleBorder::BORDER_THIN, 15 | 0x02 => StyleBorder::BORDER_MEDIUM, 16 | 0x03 => StyleBorder::BORDER_DASHED, 17 | 0x04 => StyleBorder::BORDER_DOTTED, 18 | 0x05 => StyleBorder::BORDER_THICK, 19 | 0x06 => StyleBorder::BORDER_DOUBLE, 20 | 0x07 => StyleBorder::BORDER_HAIR, 21 | 0x08 => StyleBorder::BORDER_MEDIUMDASHED, 22 | 0x09 => StyleBorder::BORDER_DASHDOT, 23 | 0x0A => StyleBorder::BORDER_MEDIUMDASHDOT, 24 | 0x0B => StyleBorder::BORDER_DASHDOTDOT, 25 | 0x0C => StyleBorder::BORDER_MEDIUMDASHDOTDOT, 26 | 0x0D => StyleBorder::BORDER_SLANTDASHDOT, 27 | ]; 28 | 29 | public static function lookup(int $index): string 30 | { 31 | if (isset(self::$borderStyleMap[$index])) { 32 | return self::$borderStyleMap[$index]; 33 | } 34 | 35 | return StyleBorder::BORDER_NONE; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xls/Style/CellFont.php: -------------------------------------------------------------------------------- 1 | setSuperscript(true); 14 | 15 | break; 16 | case 0x0002: 17 | $font->setSubscript(true); 18 | 19 | break; 20 | } 21 | } 22 | 23 | /** 24 | * @var array 25 | */ 26 | protected static array $underlineMap = [ 27 | 0x01 => Font::UNDERLINE_SINGLE, 28 | 0x02 => Font::UNDERLINE_DOUBLE, 29 | 0x21 => Font::UNDERLINE_SINGLEACCOUNTING, 30 | 0x22 => Font::UNDERLINE_DOUBLEACCOUNTING, 31 | ]; 32 | 33 | public static function underline(Font $font, int $underline): void 34 | { 35 | if (array_key_exists($underline, self::$underlineMap)) { 36 | $font->setUnderline(self::$underlineMap[$underline]); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx/BaseParserClass.php: -------------------------------------------------------------------------------- 1 | master = $master; 14 | $this->formula = $formula; 15 | } 16 | 17 | public function master(): string 18 | { 19 | return $this->master; 20 | } 21 | 22 | public function formula(): string 23 | { 24 | return $this->formula; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/NumberFormat.php: -------------------------------------------------------------------------------- 1 | $styleAttributeValue) { 17 | $styleAttributeValue = str_replace($fromFormats, $toFormats, $styleAttributeValue); 18 | 19 | switch ($styleAttributeValue) { 20 | case 'Short Date': 21 | $styleAttributeValue = 'dd/mm/yyyy'; 22 | 23 | break; 24 | } 25 | 26 | if ($styleAttributeValue > '') { 27 | $style['numberFormat']['formatCode'] = $styleAttributeValue; 28 | } 29 | } 30 | 31 | return $style; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xml/Style/StyleBase.php: -------------------------------------------------------------------------------- 1 | ') : ($simple->attributes($node) ?? new SimpleXMLElement('')); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/RichText/ITextElement.php: -------------------------------------------------------------------------------- 1 | dggContainer; 23 | } 24 | 25 | /** 26 | * Set Drawing Group Container. 27 | */ 28 | public function setDggContainer(Escher\DggContainer $dggContainer): Escher\DggContainer 29 | { 30 | return $this->dggContainer = $dggContainer; 31 | } 32 | 33 | /** 34 | * Get Drawing Container. 35 | */ 36 | public function getDgContainer(): ?Escher\DgContainer 37 | { 38 | return $this->dgContainer; 39 | } 40 | 41 | /** 42 | * Set Drawing Container. 43 | */ 44 | public function setDgContainer(Escher\DgContainer $dgContainer): Escher\DgContainer 45 | { 46 | return $this->dgContainer = $dgContainer; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer.php: -------------------------------------------------------------------------------- 1 | BSECollection[] = $BSE; 20 | $BSE->setParent($this); 21 | } 22 | 23 | /** 24 | * Get the collection of BLIP Store Entries. 25 | * 26 | * @return BstoreContainer\BSE[] 27 | */ 28 | public function getBSECollection(): array 29 | { 30 | return $this->BSECollection; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/Escher/DggContainer/BstoreContainer/BSE/Blip.php: -------------------------------------------------------------------------------- 1 | data; 25 | } 26 | 27 | /** 28 | * Set the raw image data. 29 | */ 30 | public function setData(string $data): void 31 | { 32 | $this->data = $data; 33 | } 34 | 35 | /** 36 | * Set parent BSE. 37 | */ 38 | public function setParent(BSE $parent): void 39 | { 40 | $this->parent = $parent; 41 | } 42 | 43 | /** 44 | * Get parent BSE. 45 | */ 46 | public function getParent(): BSE 47 | { 48 | return $this->parent; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/IntOrFloat.php: -------------------------------------------------------------------------------- 1 | abs($b)) { 21 | $r = $b / $a; 22 | $r = abs($a) * sqrt(1 + $r * $r); 23 | } elseif ($b != 0) { 24 | $r = $a / $b; 25 | $r = abs($b) * sqrt(1 + $r * $r); 26 | } else { 27 | $r = 0.0; 28 | } 29 | 30 | return $r; 31 | } 32 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/ConditionalFormatting/Wizard/WizardInterface.php: -------------------------------------------------------------------------------- 1 | '-', 16 | self::parentheses, self::redParentheses => '\\(', 17 | }; 18 | } 19 | 20 | public function end(): string 21 | { 22 | return match ($this) { 23 | self::minus, self::redMinus => '', 24 | self::parentheses, self::redParentheses => '\\)', 25 | }; 26 | } 27 | 28 | public function color(): string 29 | { 30 | return match ($this) { 31 | self::redParentheses, self::redMinus => '[Red]', 32 | self::parentheses, self::minus => '', 33 | }; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Scientific.php: -------------------------------------------------------------------------------- 1 | setDecimals($decimals); 21 | $this->setLocale($locale); 22 | } 23 | 24 | protected function getLocaleFormat(): string 25 | { 26 | return $this->format(); 27 | } 28 | 29 | public function format(): string 30 | { 31 | return sprintf('0%sE+00', $this->decimals > 0 ? '.' . str_repeat('0', $this->decimals) : null); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Style/NumberFormat/Wizard/Wizard.php: -------------------------------------------------------------------------------- 1 | getPath() 16 | . $this->name 17 | . $this->offsetX 18 | . $this->offsetY 19 | . $this->width 20 | . $this->height 21 | . __CLASS__ 22 | ); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Pane.php: -------------------------------------------------------------------------------- 1 | sqref = $sqref; 16 | $this->activeCell = $activeCell; 17 | $this->position = $position; 18 | } 19 | 20 | public function getPosition(): string 21 | { 22 | return $this->position; 23 | } 24 | 25 | public function getSqref(): string 26 | { 27 | return $this->sqref; 28 | } 29 | 30 | public function setSqref(string $sqref): self 31 | { 32 | $this->sqref = $sqref; 33 | 34 | return $this; 35 | } 36 | 37 | public function getActiveCell(): string 38 | { 39 | return $this->activeCell; 40 | } 41 | 42 | public function setActiveCell(string $activeCell): self 43 | { 44 | $this->activeCell = $activeCell; 45 | 46 | return $this; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/ProtectedRange.php: -------------------------------------------------------------------------------- 1 | sqref = $sqref; 21 | $this->name = $name; 22 | $this->password = $password; 23 | $this->securityDescriptor = $securityDescriptor; 24 | } 25 | 26 | public function getSqref(): string 27 | { 28 | return $this->sqref; 29 | } 30 | 31 | public function getName(): string 32 | { 33 | return $this->name ?: ('p' . md5($this->sqref)); 34 | } 35 | 36 | public function getPassword(): string 37 | { 38 | return $this->password; 39 | } 40 | 41 | public function getSecurityDescriptor(): string 42 | { 43 | return $this->securityDescriptor; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /vendor/psr/simple-cache/.editorconfig: -------------------------------------------------------------------------------- 1 | ; This file is for unifying the coding style for different editors and IDEs. 2 | ; More information at http://editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | charset = utf-8 8 | indent_size = 4 9 | indent_style = space 10 | end_of_line = lf 11 | insert_final_newline = true 12 | trim_trailing_whitespace = true 13 | -------------------------------------------------------------------------------- /vendor/psr/simple-cache/LICENSE.md: -------------------------------------------------------------------------------- 1 | # The MIT License (MIT) 2 | 3 | Copyright (c) 2016 PHP Framework Interoperability Group 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 13 | > all 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 21 | > THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /vendor/psr/simple-cache/README.md: -------------------------------------------------------------------------------- 1 | PHP FIG Simple Cache PSR 2 | ======================== 3 | 4 | This repository holds all interfaces related to PSR-16. 5 | 6 | Note that this is not a cache implementation of its own. It is merely an interface that describes a cache implementation. See [the specification](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-16-simple-cache.md) for more details. 7 | 8 | You can find implementations of the specification by looking for packages providing the [psr/simple-cache-implementation](https://packagist.org/providers/psr/simple-cache-implementation) virtual package. 9 | -------------------------------------------------------------------------------- /vendor/psr/simple-cache/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "psr/simple-cache", 3 | "description": "Common interfaces for simple caching", 4 | "keywords": ["psr", "psr-16", "cache", "simple-cache", "caching"], 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "PHP-FIG", 9 | "homepage": "http://www.php-fig.org/" 10 | } 11 | ], 12 | "require": { 13 | "php": ">=5.3.0" 14 | }, 15 | "autoload": { 16 | "psr-4": { 17 | "Psr\\SimpleCache\\": "src/" 18 | } 19 | }, 20 | "extra": { 21 | "branch-alias": { 22 | "dev-master": "1.0.x-dev" 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /vendor/psr/simple-cache/src/CacheException.php: -------------------------------------------------------------------------------- 1 |